UILabel Text not Wrapping

时间:2015-05-25 22:56:52

标签: swift storyboard autolayout uilabel

我正在使用Storyboards开发一个Swift项目,我希望文本包含在标签中。在我没有使用故事板的旧Objective-C版本中,我使用了以下设置,并且工作完美。

Objective-C without Storyboard Settings

以下是Swift的设置

Swift with Storyboard Settings

我一直在阅读有关首选宽度设置的潜在自动布局问题。我目前将它们设置为自动布局,标签本身设置为宽度560.我添加了一个约束,使标签与尾随的超级视图保持20像素,虽然我认为这样可行但我仍然无法获取文本包裹。尺寸设置如下。

Label Dimension and Constraints

有人可以解释如何让文字换行吗?

8 个答案:

答案 0 :(得分:69)

首先,好消息:您已将标签设置为2行和Word Wrap。所以可以换行。优异。

现在你必须确保标签足够高。给它 no 高度约束,或给它一个足够大的高度约束,它可以容纳两行。

最后,您必须限制其宽度。这是导致文本换行的原因。如果您不限制标签的宽度,它将继续向右增长,可能会继续在屏幕上显示。标签宽度的限制会阻止这种向右的增长并导致文本换行(而标签会向下增长)。

您可以通过多种方式限制宽度。您可以拥有实际的宽度限制。或者你可以有一个前导约束和一个尾随约束,对于一些相对不可移动的东西,比如superview。还有第三种方法:在尺寸检查器上(您也会在问题的右下角显示)设置首选宽度(它显示在尺寸检查器的顶部):这是宽度, ,在所有其他条件相同的情况下,标签将停止向右生长,然后包裹并向下生长。

答案 1 :(得分:9)

以编程方式声明您的UILabel并提供

yourUILabel.contentMode = .scaleToFill
yourUILabel.numberOfLines = 0
yourUILabel.leadingMargin(pixel: 10)
yourUILabel.trailingMargin(pixel: 10)

这对我有用。

答案 2 :(得分:1)

如果您提供的行号超过1,您的文本将会换行。但是,如果标签高度不足以显示内容,则可能无法看到换行。我建议你删除高度约束或增加它的值。

答案 3 :(得分:0)

解决此问题的原因是将标签类型更改为IB中Intrinsic Size下的“占位符”。当我改变这个时,文字被包裹,警告就消失了。

答案 4 :(得分:0)

如果这有助于任何人:我遵循了这里给出的建议来修复我的标签没有包装到两行但没有任何效果。对我有用的是我首先删除了故事板中的一些相关约束(我使用自动布局)并看到标签包裹得当。我慢慢地补充了我需要的限制,一切似乎仍然正常。因此,删除和重新制作约束可能有所帮助。

答案 5 :(得分:0)

我看到您是界面构建器。有两个问题。第一个与您的约束有关,另一个与您的财产有关。

  1. 您给它指定了一个固定高度,这在换行时是错误的。您需要制作自动调整大小的标签,即根据您的情况删除高度并添加底部约束或简单删除高度。您的文字移至下一行,但是由于固定的限制,您看不到它。
  2. 您启用了剪切子视图的选项,这是错误的,因为它会剪切视图,并且您无法查看自动换行。

答案 6 :(得分:0)

添加新案例: 请勿使用TEXTVIEW向标签添加约束,否则标签将无限制地向右扩展。

答案 7 :(得分:0)

在我的情况下,我将父stackview对齐方式从中心设置为填充,并将UILabel设置为

label.textAlignment = NSTextAlignment.right