我目前有一个UILabel:
factLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 280, 100)];
factLabel.text = @"some text some text some text some text";
factLabel.backgroundColor = [UIColor clearColor];
factLabel.lineBreakMode = UILineBreakModeWordWrap;
factLabel.numberOfLines = 10;
[self.view addSubview:factLabel];
在我的iOS应用程序的整个生命周期中,factLabel获得了许多不同的值。有的句子很多,有的只有5到6个单词。
我如何设置UILabel,使字体大小的变化,使文本总是适合我定义的界限?
这是一个快速扩展UILabel。它运行一个二进制搜索算法,根据标签边界的宽度和高度调整字体大小。测试工作与iOS 9和自动布局。
用法:<label>是预定义的需要调整字体大小的UILabel
<label>.fitFontForSize()
默认情况下,该函数在5pt和300pt的字体大小范围内搜索,并将字体设置为“完全”适合其文本的范围(精确到1.0pt)。你可以定义参数,这样,例如,它在1pt和标签当前字体大小之间精确搜索0.1pts,如下所示:
<label>.fitFontForSize(1.0, maxFontSize: <label>.font.pointSize, accuracy:0.1)
复制/粘贴以下代码到您的文件中
extension UILabel {
func fitFontForSize(var minFontSize : CGFloat = 5.0, var maxFontSize : CGFloat = 300.0, accuracy : CGFloat = 1.0) {
assert(maxFontSize > minFontSize)
layoutIfNeeded() // Can be removed at your own discretion
let constrainedSize = bounds.size
while maxFontSize - minFontSize > accuracy {
let midFontSize : CGFloat = ((minFontSize + maxFontSize) / 2)
font = font.fontWithSize(midFontSize)
sizeToFit()
let checkSize : CGSize = bounds.size
if checkSize.height < constrainedSize.height && checkSize.width < constrainedSize.width {
minFontSize = midFontSize
} else {
maxFontSize = midFontSize
}
}
font = font.fontWithSize(minFontSize)
sizeToFit()
layoutIfNeeded() // Can be removed at your own discretion
}
}
注意:每个layoutIfNeeded()调用都可以自行删除