【问题标题】:How to set the fontsize programmatically to fit numberOflines value in swift4如何以编程方式设置字体大小以适应 swift 4 中的行数
【发布时间】:2018-11-10 10:43:54
【问题描述】:

我有两个名为 headingLabel 和 descriptionLabel 的 UILabel,它们的行数分别为 3 和 5。现在我希望文本的字体大小改变并适应 numberOfLines,其中文本根据接收到的一些网络 json 数据而变化。

 here is my code

    let headingLabel : UILabel = {
        let hl = UILabel()
        hl.translatesAutoresizingMaskIntoConstraints = false
        hl.text = "Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet amet Lorem ipsum dolor sit amet amet Lorem ipsum dolor"

        hl.textColor = .black
        hl.lineBreakMode = NSLineBreakMode.byWordWrapping
        hl.numberOfLines = 3;
        hl.sizeToFit()
        hl.clipsToBounds = true
        hl.font = hl.font.withSize(20)

        return hl
    }()

    let descriptionLabel : UILabel = {
        let dl = UILabel()
        dl.translatesAutoresizingMaskIntoConstraints = false
        dl.text = "Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet amet Lorem ipsum dolor sit amet amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet amet Lorem ipsum dolor sit amet amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet amet Lorem ipsum dolor sit amet amet Lorem ipsum dolorLorem ipsum dolor sit amet Lorem ipsum dolor sit amet amet Lorem ipsum dolor sit amet amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet amet Lorem ipsum dolor sit amet amet Lorem ipsum dolor Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet amet Lorem ipsum dolor sit amet amet Lorem ipsum dolor"
        dl.textColor = .black
        dl.lineBreakMode = NSLineBreakMode.byWordWrapping
        dl.numberOfLines = 5
        dl.font = dl.font.withSize(18)
        dl.sizeToFit()
        dl.clipsToBounds = true
        dl.alpha = 0.8
        return dl
    }()

【问题讨论】:

    标签: ios swift fonts


    【解决方案1】:

    使用 Autoshrink 将文本调整到标签框架中。

    Authoshrink 最小字体大小

    Authoshrink 最小字体比例

    关于 UILabel 的 Apple 文档 - Autoshrink

    确定标签是否在使用截断之前调整文本的外观。选择最小字体比例并输入一个值以允许标签减小字体大小以适合文本。启用 Tighten Letter Spacing 以允许标签减少字符间距。在运行时分别使用 minimumScaleFactor 和allowDefaultTighteningForTruncation 属性访问这些值。

    【讨论】:

    • 我只想补充一点:注意 Line Break : Truncate Tail 设置对于这个工作很重要。仅 Word Wrap 换行不会以这种方式运行。另请注意,不保证文本会缩小到足以容纳所有内容(实际上在您的屏幕截图的最后一个示例中,它不适合:而是被截断)。跨度>
    • @matt - 欢迎您改进此答案的质量。请通过编辑此答案添加您的输入。关于上一个示例,我刚刚展示了一种方法,即 OP 如何解决她的问题。她可以根据文本大小可见性要求减小字体比例以使文本适合框架。
    • 好吧,让我们把评论当作评论吧。我真的不想以任何方式减损您的回答。
    【解决方案2】:

    请给:

    dl.numberOfLines =  0
    

    【讨论】:

    • 如果我给 numberOfLines = 0 文本溢出矩形 UIView 框。我希望文本在框内
    • 如果没有任何效果,我会考虑 UITextView 作为替代方案。如果您有任何使用 textview 的解决方案,请分享
    • 请检查屏幕截图 LinebreakMode = TruncateTail
    • 什么?我没找到你
    • 换行模式为截尾
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2016-02-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多