创建单一大小的动态 UILabel 字体
Create single size dynamic UILabel font
我们都知道如何创建动态 UILabel 字体(单行)-
lbl.adjustsFontSizeToFitWidth = true
lbl.numberOfLines = 1
lbl.minimumScaleFactor = 0.1
lbl.baselineAdjustment = UIBaselineAdjustment.AlignCenters
lbl.textAlignment = NSTextAlignment.Center
问题是它为每个给定的字符串给出了不同的结果。因此,例如,如果我有一个字符串 "Hello"
和 "Hello World"
,则计算出的字体大小将为 different.I 需要为所有字符串创建具有单一大小的动态字体。
我的项目示例:
示例来自 iPhone 6 个内置相机效果(如您所见,所有 UILabels 字体大小都匹配):
我在想什么?
基本上我知道我将拥有的最大字符串是多少。所以我想以某种方式计算(以有效的方式)给定 中 最大字符串 的 字体大小 是多少CGSIze。因此它将始终保持在边界内。 有什么建议吗?
你就是那个说:
lbl.minimumScaleFactor = 0.1
那一行的意思是,"Hey, iOS, if you feel like shrinking the font, go ahead and shrink it."如果你不想那样,那就别说了。
相反,选择一个字体大小并坚持下去。什么尺寸?嗯,NSString 有能力告诉你在给定的 font/size 中绘制的字符串的大小。因此,只需选择最长的字符串并循环选择不同的大小,直到找到适合所需 space.
的字符串
将您自己的价值观插入其中:
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 会告诉你它缩小了多少以适应;但那个功能被打破了,唉,所以我不能建议你使用它。)
我们都知道如何创建动态 UILabel 字体(单行)-
lbl.adjustsFontSizeToFitWidth = true
lbl.numberOfLines = 1
lbl.minimumScaleFactor = 0.1
lbl.baselineAdjustment = UIBaselineAdjustment.AlignCenters
lbl.textAlignment = NSTextAlignment.Center
问题是它为每个给定的字符串给出了不同的结果。因此,例如,如果我有一个字符串 "Hello"
和 "Hello World"
,则计算出的字体大小将为 different.I 需要为所有字符串创建具有单一大小的动态字体。
我的项目示例:
示例来自 iPhone 6 个内置相机效果(如您所见,所有 UILabels 字体大小都匹配):
我在想什么?
基本上我知道我将拥有的最大字符串是多少。所以我想以某种方式计算(以有效的方式)给定 中 最大字符串 的 字体大小 是多少CGSIze。因此它将始终保持在边界内。 有什么建议吗?
你就是那个说:
lbl.minimumScaleFactor = 0.1
那一行的意思是,"Hey, iOS, if you feel like shrinking the font, go ahead and shrink it."如果你不想那样,那就别说了。
相反,选择一个字体大小并坚持下去。什么尺寸?嗯,NSString 有能力告诉你在给定的 font/size 中绘制的字符串的大小。因此,只需选择最长的字符串并循环选择不同的大小,直到找到适合所需 space.
的字符串将您自己的价值观插入其中:
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 会告诉你它缩小了多少以适应;但那个功能被打破了,唉,所以我不能建议你使用它。)