我有一个UILabel
,adjustsFontSizeToFitWidth
设置为YES
,正如预期的那样,当文字太大而无法以{{的大小绘制时,它缩小了屏幕上显示的字体1}}属性。
我已经查询了font
属性,但这与最初设置在标签上时的情况相同,font
似乎没有任何其他可用的属性。
有没有办法找出标签所缩小的缩小文字的大小?
编辑:不建议重复,因为在iOS7中已弃用UILabel
答案 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