【问题标题】:NSLayoutConstraint for a UILabel to "grow" extra linesNSLayoutConstraint 用于 UILabel “增长”额外的行
【发布时间】:2013-03-07 16:23:30
【问题描述】:

我有一个UILabel,我想设置它,使它有一个固定的宽度和可变的高度,取决于它的text,而不是它的superView

即如果text 是“Hello World”。那么标签将是...

------------------------
|Hello World.          |
------------------------

如果text 是“这是一段很长的文本,跨越了几行”。那么标签将是...

------------------------
|This is some very long|
|text that goes over   |
|several lines.        |
------------------------

我已经使用NSLayoutConstraint 设置了固定宽度并将numberOfLines 设置为0,但它只保留一个行高并用省略号连接文本。

我知道有一种叫做“contentResistance”之类的东西,但我不确定它的名称或如何使用它。

这可能吗?

【问题讨论】:

    标签: ios objective-c uilabel nslayoutconstraint


    【解决方案1】:

    您需要将标签的preferredMaxLayoutWidth 设置为您的固定宽度。我不知道为什么它不能自己解决这个问题,因为你已经限制了一个宽度,但是你去了。

    如果在自动布局世界中必须设置固定大小感觉不对(它应该这样做!),那么您可以在 viewDidLayoutSubviews 中设置标签宽度布局发生后的值。在这种情况下,请注意不要陷入使布局无效的无限循环。

    【讨论】:

    • 谢谢。虽然有 AUTO 布局并给 UILabel 一个首选宽度,但感觉是错误的。我拥有的标签的“固定”宽度取决于其超级视图的宽度。然而,preferredMaxLayoutWidth 现在是一个常数。哦,好吧,在这种情况下,superView 不会改变,所以没关系,哈哈。
    • 我同意!对于更动态的布局,您可以在 viewDidLayoutSubviews 中设置值并将其基于边界宽度。
    【解决方案2】:

    试试这个可能对你有帮助的代码>

       label.text=@"haiiiiiiiii";
    
        UIFont *cellFont=[UIFont fontWithName:@"Helvetica" size:12.0];
        CGSize constraintSize=CGSizeMake(250,MAXFLOAT);
        CGSize txtViewSize=[label.text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
    

    yourlabelname.numberOfLines=0;

    CGRect frame=yourlabelname.frame;

    frame.size.width=250;
    
    frame.size.height=txtViewSize.height;
    
    yourlabelname.frame=frame;
    
    yourlabelname.text=cellText;
    

    【讨论】:

    • 我正在使用 AutoLayout,所以我无法直接更改框架。不过还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2020-09-30
    相关资源
    最近更新 更多