Ios 测量UILabel或textField的adjustsFontSizeToFitWidth调整量

Ios 测量UILabel或textField的adjustsFontSizeToFitWidth调整量,ios,xcode,fonts,uitextfield,uilabel,Ios,Xcode,Fonts,Uitextfield,Uilabel,UILabels和textFields可以自动缩放字体以适应视图的空间(例如,当文本累积时)。有没有办法测量所执行的量表的数量?看起来,自动缩放时,myLabel.font.pointsize或myTextField.font.pointsize的值保持不变,而与文本的显示比例无关。在UIKit additions forNSString中有一种方法可以做到这一点: - (CGSize)sizeWithFont:(UIFont *)font minFontSize:(CGFloat)minFon

UILabels和textFields可以自动缩放字体以适应视图的空间(例如,当文本累积时)。有没有办法测量所执行的量表的数量?看起来,自动缩放时,myLabel.font.pointsize或myTextField.font.pointsize的值保持不变,而与文本的显示比例无关。

在UIKit additions for
NSString
中有一种方法可以做到这一点:

- (CGSize)sizeWithFont:(UIFont *)font minFontSize:(CGFloat)minFontSize actualFontSize:(CGFloat *)actualFontSize forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode
因此,如果您使用的是UILabel,则可以使用以下代码:

CGFloat actualFontSize;
UILabel *label = [self label];
CGSize size = [[label text] sizeWithFont:[label font]
                             minFontSize:[label minimumFontSize]
                          actualFontSize:&actualFontSize
                                forWidth:[label bounds].size.width
                           lineBreakMode:[label lineBreakMode]];

此时,
size
将包含绘制文本的大小,
actualfont size
将是标签用于绘制的字体的实际大小。

UIFont
对象是不可变的,您需要获取底层的
CTFontRef
对象,才能从font对象获取此类信息;你为什么想知道这个?我看不到任何直接获取该信息的方法,除了根据文本大小(无缩放)和UILabel的大小进行估计之外。原因是我可以根据字体的缩放来移动标签,以保持文本元素之间的视觉间距。谢谢。这一页上的变化似乎起到了作用: