当为myLabel.adjustsFontSizeToFitWidth = YES
时,UILabel将自动调整字体大小,以防文本对标签而言太长。例如,如果我的标签只有100px宽,而我的文本太长,不适合当前的字体大小,它将缩小字体大小,直到文本适合标签。
当字体变小时,我需要从UILabel获取实际显示的字体大小。例如,假设我的字体大小实际上是20,但UILabel必须将其缩小到10。当我向UILabel询问字体和字体大小时,我得到了我的旧字体大小(20),但不是显示的那个(10)。
发布于 2010-03-08 01:56:22
我不确定这是否完全准确,但它应该是相当接近,希望。它可能不会考虑截断的字符串或标签的高度,但这是您可以手动完成的事情。
该方法
将返回文本大小,请注意,它还有一个用于实际使用的字体大小的引用参数。
发布于 2016-06-10 21:26:39
以防有人还需要答案。在iOS9中,您可以使用boundingRectWithSize:options:context:
来计算实际的字体大小。请注意,context.minimumScaleFactor不应为0.0才能进行伸缩。
- (CGFloat)adjustedFontSizeForLabel:(UILabel *)label {
NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithAttributedString:label.attributedText];
[text setAttributes:@{NSFontAttributeName:label.font} range:NSMakeRange(0, text.length)];
NSStringDrawingContext *context = [NSStringDrawingContext new];
context.minimumScaleFactor = label.minimumScaleFactor;
[text boundingRectWithSize:label.frame.size options:NSStringDrawingUsesLineFragmentOrigin context:context];
CGFloat adjustedFontSize = label.font.pointSize * context.actualScaleFactor;
return adjustedFontSize;
}
发布于 2016-11-12 09:18:18
对于单行UILabel,这个简单的解决方案很好用:
//myLabel - initial label
UILabel *fullSizeLabel = [UILabel new];
fullSizeLabel.font = myLabel.font;
fullSizeLabel.text = myLabel.text;
[fullSizeLabel sizeToFit];
CGFloat actualFontSize = myLabel.font.pointSize * (myLabel.bounds.size.width / fullSizeLabel.bounds.size.width);
//correct, if new font size bigger than initial
actualFontSize = actualFontSize < myLabel.font.pointSize ? actualFontSize : myLabel.font.pointSize;
https://stackoverflow.com/questions/2396715
复制相似问题