UILabel 文本不换行

UILabel Text Not Wrapping

我正在使用 Storyboards 开发一个 Swift 项目,我希望在其中将文本包装在标签中。在我没有使用 Storyboard 的旧 Objective-C 版本中,我使用了以下设置并且一切正常。

这里是 Swift

的设置

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

谁能解释一下如何让文字换行?

首先,好消息:您已将标签设置为 2 行和自动换行。所以它可以换行。太好了。

现在你必须确保标签足够高。要么给它 no 高度限制,要么给它一个足够大的高度限制,它可以容纳两条线。

最后,您必须限制它的宽度。这就是导致文本换行的原因。如果您不限制标签的宽度,它会一直向右增长,可能会继续超出屏幕。标签宽度的限制阻止了这种向右增长并导致文本换行(并且标签向下增长)。

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

如果您提供的行数超过 1,您的文本将换行。但是,如果标签高度不足以显示内容,您可能看不到它换行。我建议您删除高度限制或增加其值。

解决此问题的方法是在 IB 中将 Intrinsic Size 下的标签类型更改为 "Placeholder"。当我更改它时,文本换行并且警告消失了。

以防万一这对任何人有帮助:我已经按照此处给出的建议修复我的标签而不是换行成两行,但没有任何效果。对我有用的是我首先删除了故事板中的一些相关约束(我正在使用自动布局)并看到标签正确包装。我慢慢地添加了我需要的约束,一切似乎仍然正常。因此,删除并重新创建约束可能会有所帮助。

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

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

这对我有用。

正如我所见,您是界面生成器。有两个问题。第一个是你的约束,另一个是 属性.

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

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

在我的例子中,我将我的父堆栈视图对齐方式从中心设置为填充并将 UILabel 设置为

label.textAlignment = NSTextAlignment.right