【问题标题】:Create single size dynamic UILabel font创建单一大小的动态 UILabel 字体
【发布时间】:2016-01-14 14:55:35
【问题描述】:

我们都知道如何创建动态 UILabel 字体(单行)-

 lbl.adjustsFontSizeToFitWidth = true
 lbl.numberOfLines = 1
 lbl.minimumScaleFactor = 0.1
 lbl.baselineAdjustment = UIBaselineAdjustment.AlignCenters
 lbl.textAlignment  = NSTextAlignment.Center

问题在于它对每个给定的字符串给出不同的结果。因此,例如,如果我有一个字符串 "Hello""Hello World" 计算的字体大小将不同。我需要为所有字符串创建具有单一大小的动态字体。

我的项目示例:

iPhone 6 内置相机效果示例(您可以看到所有 UILabel 字体大小匹配):

我在想什么?

基本上我知道我将拥有的最大字符串是什么。所以我想以某种方式计算(以一种有效的方式)给定 CGSIze最大字符串字体大小 是多少。所以它会一直保持在界限内。 有什么建议吗?

【问题讨论】:

    标签: objective-c string swift dynamic font-size


    【解决方案1】:

    你就是这样说的:

    lbl.minimumScaleFactor = 0.1
    

    那行意思是,“嘿,iOS,如果你想缩小字体,就缩小吧。”如果你不想那样,就不要那样说。

    相反,选择一个字体大小并坚持下去。什么尺寸?好吧,NSString 有能力告诉你一个给定字体/大小的绘制字符串的大小。因此,只需使用最长的字符串并循环使用不同的大小,直到找到适合所需空间的字符串。

    将您自己的价值观插入其中:

        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 会告诉你它缩小到适合的程度;但是这个功能被破坏了,唉,所以我可以'不建议你使用它。)

    【讨论】:

    • 嗨,马特,谢谢您的评论。我知道这不是使用它的正确方法 IF 您显然正在寻找相同的字体大小。我只是把它放在那里,所以人们不会建议这种方法。基本上我需要做的(以一种有效的方式)。使用框架大小(UILabel 框架)和给定的字符串(包括字体名称)-> 返回所需的字体大小
    • 我已经回答过了。只需快速循环一下,比如 10 种不同的尺寸。没有什么低效的。它不会花费一毫秒。相信我。我已经做了无数次了。
    • 是的。那就是我打算做的,只是想尝试获得更好的结果。现在我们有 iPhone 4 到 iPad 视网膜 -> 巨大的差异。我使用 autoLayout 来设置我的视图,这一切都与屏幕框架大小有关。所以对于更大的屏幕,它可能会运行 10 次以上
    • 尝试让算法更智能而不是寻找不同的方式会更聪明吗?
    • 添加了实际代码。相信我,这根本不需要时间。您正在浪费自己的时间过早地进行优化。
    猜你喜欢
    • 2011-06-19
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多