【问题标题】:Word Wrap not working for UILabel自动换行不适用于 UILabel
【发布时间】:2014-08-05 15:33:30
【问题描述】:

使用自动布局我无法在代码中覆盖我的标签。我在 IB 中设置了标签属性:Lines = 0, LineBreaks = Word Wrap,但我将高度设置为单行,因为选择的单元格决定了标签中的文本。所以有时标签只有一行。

在我看来DidLoad:

myLabel.text = @”blah, blah, blah….”;
[myLabel setLineBreakMode:NSLineBreakByWordWrapping];
myLabel.numberOfLines  = 0; //have tried 1 but didn’t help
[myLabel sizeToFit];

这适用于另一个项目,但我没有使用 AutoLayout。 AutoLayout 似乎覆盖了这些设置。
我什至添加了

[myLabel setFrame:CGRectMake(20, 135, 280, 80); 

但没用。

【问题讨论】:

    标签: ios objective-c uilabel


    【解决方案1】:

    允许标签的内在尺寸决定高度。你是正确的,你需要将 numberOfLines 属性设置为 0。由于你使用的是 AutoLayout,所以不要调用 sizeToFit,你需要设置标签的 preferredMaxLayoutWidth。

    【讨论】:

      【解决方案2】:

      这是因为标签的属性只设置一次(在viewDidLoad 中),而每次调用视图的 layoutSubviews 时都会应用来自自动布局的约束。

      此外,根据 Apple 的文档,如果 UILabel 正在调整字体,则使用换行模式来换行文本将无法正常工作。

      如果这是 UIViewController,请将 UILabel 覆盖代码移动到 - (void)viewDidLayoutSubviews,或者如果这是在 UIView 中,请将代码移动到 - (void)layoutSubviews

      不要忘记在这些电话中拨打 [super viewDidLayoutSubviews][super layoutSubviews]

      话虽如此,如果您发现自己需要覆盖约束,请在 nib 文件中将约束和属性设置为您想要的,否则使用纯代码设置标签。

      【讨论】:

      • 我试过这很好,它不会换行。我使用自动布局菜单让它在 IB 中设置约束。如果我能够在代码中调整标签的高度,那么我在它下面的其他视图将关闭。
      • 关于以编程方式更改字体的评论会让我搞砸了 - 去寻找那些 Apple 文档,看看我是否能准确理解发生了什么。
      • 标签的属性确实需要只设置一次,自动布局只改变边界或框架和中心。
      【解决方案3】:

      您需要将preferredMaxLayoutWidth 设置为标签的最大宽度。您应该在viewWillLayoutSubviews 中执行此操作。

      【讨论】:

      • 我用 [super viewWillLayoutSubviews] 试过了; myLabel.preferredMaxLayoutWidth = 280;除了 SetLineBreakMode 和 numberOfLines 之外,它仍然不换行。
      • 如果是 CollectionViewCell?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      相关资源
      最近更新 更多