首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当-adjustsFontSizeToFitWidth设置为YES时,如何计算UILabel的字体大小?

当-adjustsFontSizeToFitWidth设置为YES时,如何计算UILabel的字体大小?
EN

Stack Overflow用户
提问于 2010-03-07 23:13:31
回答 4查看 12K关注 0票数 30

当为myLabel.adjustsFontSizeToFitWidth = YES时,UILabel将自动调整字体大小,以防文本对标签而言太长。例如,如果我的标签只有100px宽,而我的文本太长,不适合当前的字体大小,它将缩小字体大小,直到文本适合标签。

当字体变小时,我需要从UILabel获取实际显示的字体大小。例如,假设我的字体大小实际上是20,但UILabel必须将其缩小到10。当我向UILabel询问字体和字体大小时,我得到了我的旧字体大小(20),但不是显示的那个(10)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-08 01:56:22

我不确定这是否完全准确,但它应该是相当接近,希望。它可能不会考虑截断的字符串或标签的高度,但这是您可以手动完成的事情。

该方法

- (CGSize)sizeWithFont:(UIFont *)font minFontSize:(CGFloat)minFontSize actualFontSize:(CGFloat *)actualFontSize forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode

将返回文本大小,请注意,它还有一个用于实际使用的字体大小的引用参数。

票数 6
EN

Stack Overflow用户

发布于 2016-06-10 21:26:39

以防有人还需要答案。在iOS9中,您可以使用boundingRectWithSize:options:context:来计算实际的字体大小。请注意,context.minimumScaleFactor不应为0.0才能进行伸缩。

代码语言:javascript
复制
- (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;
}
票数 4
EN

Stack Overflow用户

发布于 2016-11-12 09:18:18

对于单行UILabel,这个简单的解决方案很好用:

代码语言:javascript
复制
//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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2396715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档