【问题标题】:UILabel Text Not WrappingUILabel 文本不换行
【发布时间】:2015-08-07 10:44:41
【问题描述】:

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

这里是 Swift 的设置

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

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

【问题讨论】:

  • 我在术语上的错误。我的意思是说故事板不是游乐场。
  • 这是一个改进,但请注意,这与 Swift Objective-C无关。您应该从问题中删除所有对语言的引用。如果您以前没有使用故事板,那么对比将在代码和故事板之间,或者在 .xib 文件和故事板之间。
  • 你也可以去掉 UILabel 的底部约束

标签: swift storyboard autolayout uilabel


【解决方案1】:

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

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

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

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

【讨论】:

  • “要么不给它高度限制” - 这就是给我的!
  • “最后,你必须限制它的宽度”这对我有用。我的 xib 打破了宽度限制,它一直将行号设置为 1。
【解决方案2】:

以编程方式声明你的 UILabel 并给出

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

这对我有用。

【讨论】:

  • 这会修复当您将其尺寸设置得太大时文本会超出标签框架的问题。
【解决方案3】:

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

【讨论】:

  • 我试过这个,但我没有运气。无论如何,感谢您的意见。
【解决方案4】:

解决此问题的方法是将 IB 中 Intrinsic Size 下的标签类型更改为“占位符”。当我更改此内容时,文本被包裹并且警告消失了。

【讨论】:

  • “设置设计时固有内容大小仅影响在 Interface Builder 中编辑时的视图。视图在运行时不会具有此固有内容大小。”
  • @static0886 你试过这个答案并发现它失败了吗?这与我见过的 Interface Builder 所做的与文档相反的最奇怪的事情相去甚远。
【解决方案5】:

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

【讨论】:

    【解决方案6】:

    正如我看到的界面生成器。有两个问题。第一个与您的约束有关,另一个与属性有关。

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

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

        在我的情况下,我将父堆栈视图对齐从中心设置为填充并将 UILabel 设置为

        label.textAlignment = NSTextAlignment.right
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-19
          • 2010-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多