【问题标题】:Autosize UILabel自动调整 UILabel
【发布时间】:2011-03-15 17:29:14
【问题描述】:

有没有办法自动调整 UILabel 的大小?给定大小 40 x 40,文本字体大小将根据字符数进行调整。

【问题讨论】:

    标签: ios objective-c swift uilabel autoresize


    【解决方案1】:

    您可以使用adjustFontSizeToFitWidth 属性。所以像这样。

    UILabel *myLabel = [[UILabel alloc] init];
    [myLabel setAdjustsFontSizeToFitWidth:YES];
    

    在 Interface Builder 中,标签属性屏幕上有一个复选框,可让您调整字体大小以适应标签。

    【讨论】:

    • 没问题。对不起,用于读取adjustFontSizeToWidth的示例代码,但它应该是adjustFontSizeToFitWidth。我更正了。
    • 您在 AdjustS 中跳过一个字母:[myLabel setAdjustsFontSizeToFitWidth:YES];
    【解决方案2】:

    嗯,你有没有查看 UILabel API http://developer.apple.com/iphone/library/documentation/uikit/reference/UILabel_Class/Reference/UILabel.html 有一个名为 adjustsFontSizeToFitWidth 的简洁属性

    【讨论】:

    • 不用担心 :) 抱歉,我没有提供任何示例代码。此外,Apple Docs 非常有价值和有用。
    【解决方案3】:

    采用自动布局设计理念,UILabel不设置高度限制,不设置。行数为 0

    Autolayout 会根据标签的文字自动处理标签的动态高度。如果标签有单行文本,那么它将只占用单行空间。如果 label 有多于一行,那么它会根据文本大小和显示文本所需的行数调整 label 的大小。

    将动态文本信息的行数设置为零,这在您的文本变化时很有用。

    以编程方式 (Swift 4)

    var label = UILabel()
    let stringValue = "iOS\nmultiline\nlabel\nin\nInterface\nbuilder"
    label.text = stringValue
    label.numberOfLines = 0 // Set 0, if number of lines not specified.
    label.lineBreakMode = .byTruncatingTail // or .byWrappingWord
    label.minimumScaleFactor = 0.8 . // It is not required but nice to have a minimum scale factor to fit text into label frame
    

    使用 Inetrface Builder

    注意:不需要设置Minimum Font Scale,但最好有一个最小比例因子以使文本适合标签框架。

    参考:UILabel - numberOfLines

    【讨论】:

      【解决方案4】:

      最好使用 Intrinsic 内容和抗压缩优先级来调整标签 w.r.t 内容的大小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 2014-01-14
        • 1970-01-01
        相关资源
        最近更新 更多