自动布局:UILabel 无法正确调整长文本的大小

Posted

技术标签:

【中文标题】自动布局:UILabel 无法正确调整长文本的大小【英文标题】:Autolayout: UILabel not resizing properly with long text 【发布时间】:2015-11-30 22:36:11 【问题描述】:

我有一个 UITableViewCell 和两个 UILabels:标题和描述。

我的标题标签有问题。基本上,如果文本大于可用空间并防止“...”,我想要增加它的高度。就是这个样子,可以看到右边title标签的约束。

如您所见,标题标签成功地增加了它的高度,但文本仍然在一行中。 “文本样式 - 标注”中使用的字体。有什么建议吗?

编辑 1:我已经将行数设置为 '0'

编辑 2:我通过删除 UILabel 并重新添加来修复它,但首先看看 Wojtek 提出的建议。

【问题讨论】:

设置标签内容后可以执行yourLabel.sizeToFit() @ClaudioRedi 谢谢,已经这样做了,结果相同。 您可能需要在 UILabel 上设置 preferredMaxLayoutWidth 以便它知道何时换行。看起来约束取决于标签的 -intrinsicContentSize ,除非您告诉它必须从哪里开始包装,否则它将始终是一行(因为它需要弄清楚这一点以生成约束,进而定义框架) . 如果只是一个标签,只给前导和尾随,和高度,不给任何宽度限制 尝试在sizeToFit 之后执行yourLabel.updateConstraints()。自动布局对我来说仍然是一场噩梦,所以如果没有帮助,我深表歉意 【参考方案1】:

在启用自动布局的情况下支持此行为,请按照相关 UILabel 的以下步骤操作。

    在实用程序窗格 > 属性检查器中将行数设置为“0”。

    右键单击 UILabel 和 Alt - 控件(Xcode 7.1 及更高版本)拖动到它的超级视图以设置前导、尾随、顶部和底部边距。

    对于自动高度和宽度,您可以将约束的优先级设置为级别“600”,关系为“大于或等于”。

Github 示例(在以下示例中,我仅对底部约束使用不同的“关系”。您也可以选择对不同的约束执行此操作,即特定情况下的尾随约束):https://github.com/wojtekdmyszewicz/UILabel

【讨论】:

对不起,不工作。我忘了提到我已经将行数设置为 0,我将添加到主帖子中。设置唯一缺少的顶部约束没有效果。 @estemendoza 你在使用自动布局吗? @estemendoza,你有没有将换行符设置为“自动换行”? 不,我在“Truncate Tail”中有它,这就是它显示“...”的原因,但我改为尝试它并得到相同的结果。 @estemendoza 也许首先尝试仅使用一个 UILabel 和正确的约束(前导、尾随、底部、顶部)对其进行测试。并确保没有以编程方式与您的约束冲突。

以上是关于自动布局:UILabel 无法正确调整长文本的大小的主要内容,如果未能解决你的问题,请参考以下文章

带有自动布局的 uilabel 使用填充调整大小

带有 UITextView 的 UITableViewCell 中的自动布局

UITextView 使用自动布局自动调整大小

通过滑动来调整 UILabel 文本的大小以删除

如何根据标签可用的高度调整 UILabel 字体大小

自动布局 - UILabel 在方向更改后宽度缩小,这是由另一个应该自动调整字体大小的 UILabel 引起的