我们都知道如何创建动态 UILabel 字体(单行)-
lbl.adjustsFontSizeToFitWidth = true
lbl.numberOfLines = 1
lbl.minimumScaleFactor = 0.1
lbl.baselineAdjustment = UIBaselineAdjustment.AlignCenters
lbl.textAlignment = NSTextAlignment.Center
问题是它对每个给定的字符串给出不同的结果。因此,例如,如果我有一个字符串 "Hello"
和 "Hello World"
,计算出的字体大小将会不同。我需要为所有字体创建具有单一大小的动态字体字符串。
我的项目示例:
iPhone 6 内置相机效果示例(如您所见,所有 UILabels 字体大小均匹配):
我想做什么?
基本上我知道我拥有的最大字符串是多少。所以我想以某种方式计算(以有效的方式)给定CGSIze中最大字符串的字体大小。所以它将始终保持在界限之内。 有什么建议吗?
最佳答案
你说的是:
lbl.minimumScaleFactor = 0.1
这行意思是,“嘿,iOS,如果你想缩小字体,那就缩小吧。”如果你不想这样,那就别说。
相反,选择一个字体大小并坚持使用。什么尺寸?嗯,NSString 能够告诉您给定字体/大小的绘制字符串的大小。因此,只需取出最长的绳子并循环选择不同的尺寸,直到找到适合所需空间的绳子。
将您自己的值(value)观插入其中:
func fontSizeToFit(s:String, fontName:String, intoWidth w:CGFloat) -> CGFloat? {
let desiredMaxWidth = w
for i in (8...20).reverse() {
let d = [NSFontAttributeName:UIFont(name:fontName, size:CGFloat(i))!]
let sz = (s as NSString).sizeWithAttributes(d)
if sz.width <= desiredMaxWidth {
return(CGFloat(i))
}
}
return nil
}
print(fontSizeToFit("Transferation", fontName:"GillSans", intoWidth:50)) // 9.0
(曾经有一个优雅的字符串绘制功能,您可以让字体缩小并且 NSString 会告诉您它缩小了多少以适合;但是该功能已损坏,唉,所以我可以不建议您使用它。)
关于objective-c - 创建单一尺寸的动态 UILabel 字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33160574/