当adjustsFontSizeToFitWidth为YES时,UILabel获取显示的字体大小

时间:2015-10-07 10:29:49

标签: ios uikit uilabel

我有一个UILabeladjustsFontSizeToFitWidth设置为YES,正如预期的那样,当文字太大而无法以{{的大小绘制时,它缩小了屏幕上显示的字体1}}属性。

我已经查询了font属性,但这与最初设置在标签上时的情况相同,font似乎没有任何其他可用的属性。

有没有办法找出标签所缩小的缩小文字的大小?

编辑:不建议重复,因为在iOS7中已弃用UILabel

2 个答案:

答案 0 :(得分:10)

事实证明它有点复杂,因为iOS 7弃用了sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:中使用的有用suggested duplicate

我们现在必须使用NSAttributedString

从字符串中创建一个NSAttributedString,在标签上设置。将整个属性字符串的字体设置为标签的字体。

NSDictionary *attributes = @{NSFontAttributeName : self.label.font};
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:text
                                                                       attributes:attributes];

然后,创建一个NSStringDrawingContext对象,配置为使用标签的最小比例因子。这将用于帮助计算实际字体大小。

NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
context.minimumScaleFactor = self.label.minimumScaleFactor;

然后我们可以使用NSAttributedString方法计算边界矩形,并进一步配置NSStringDrawingContext

[attributedString boundingRectWithSize:self.label.bounds.size
                               options:NSStringDrawingUsesLineFragmentOrigin
                               context:context];

这将进行绘图传递,并且将更新上下文以包括用于在可用空间(标签的大小)中绘制文本的比例因子。

获取实际的字体大小就像:

CGFloat actualFontSize = self.label.font.pointSize * context.actualScaleFactor;

答案 1 :(得分:0)

我已在 link 内针对与您的问题类似的 Swift 5 回答了您的问题

但是,我们可以按如下方式获取ActualFontSize: 对于单行UILabel

extension UILabel {

     var actualFontSize: CGFloat {
    //initial label
     let fullSizeLabel = UILabel()
     fullSizeLabel.font = self.font
     fullSizeLabel.text = self.text
     fullSizeLabel.sizeToFit()

     var actualFontSize: CGFloat = self.font.pointSize * (self.bounds.size.width / fullSizeLabel.bounds.size.width);

    //correct, if new font size bigger than initial
actualFontSize = actualFontSize < self.font.pointSize ? actualFontSize : self.font.pointSize;

     return actualFontSize
    }

}

然后,获取实际的字体大小非常简单:

let currentLabelFontSize = myLabel.actualFontSize
相关问题