具有自动布局的多行UILabel不起作用

时间:2014-04-14 15:25:55

标签: ios storyboard uilabel autolayout multiline

我正在尝试设置约束以在静态表格视图单元格中获取多行标签,但显然这对我不起作用,标签仍然在一行中。我已将numberOfLines属性设置为0,并将高度约束设置为大于或等于。我正在tableView:heightForRowAtIndexPath正确设置单元格的高度。请查看我的屏幕截图,查看IB中的设置。

enter image description here

2 个答案:

答案 0 :(得分:3)

在上面的评论中,您提到您目前没有设置preferredMaxLayoutWidth。此属性告诉您的标签它应该在该属性值的宽度上布置其文本。在UILabel.h中:

  

如果非零,则在确定多线标签的-intrinsicContentSize时使用此选项

换句话说,如果不设置,标签的内在内容大小是标签绘制文本所需的宽度。如果将此属性设置为标签的边界,它将在下一行开始绘制(否则如果numberOfLines为0,它将关闭文本。)

在您的情况下,我可能会在tableView:willDisplayCell:forRowAtIndexPath:中执行此操作。

答案 1 :(得分:1)

您可以在代码中设置preferredMaxLayoutWidth,但在设计故事板中的用户界面时,您仍然会看到一条长边单线标签在边缘处被切断。另一种方法是使用Option-Return在故事板内的文本中的任何位置手动插入换行符。然后,您只需将行数设置为大于文本适合的行数。然后选择您的标签,点击Cmd-=。这将计算标签的内在内容大小,其中换行符恰好位于您希望的位置。

从理论上讲,我认为设置preferredMaxLayoutWidth是更正确的方法,特别是使用Autolayout。但是,我发现使用上面描述的方法更实际,因为它可以让你在故事板中的设计时看到布局,并且你可以完全控制你的换行符。对于文字不经常更改的标签,这通常更有效。如果您要动态更改标签文字,则设置preferredMaxLayoutWidth是首选方式。