如何仅使用情节提要使 UILabel 的 UIView 超级视图适合 UILabel 的固有高度?

Posted

技术标签:

【中文标题】如何仅使用情节提要使 UILabel 的 UIView 超级视图适合 UILabel 的固有高度?【英文标题】:How do I make the UIView superview of a UILabel fit the intrinsic height of the UILabel using the storyboard only? 【发布时间】:2018-03-28 10:41:06 【问题描述】:

我有一个 UIView,它的孩子是一个 UILabel。然后,我使用约束将 UILabel 的左侧、顶部、右侧和底部与其父视图(UIView)对齐。

但我得到的是一个 UILabel,它匹配其父视图的高度,但不匹配其固有高度(小于或大于其文本内容,具体取决于 UIView 的大小)。我期望 UIView 调整自身大小以完全适合 UILabel 的高度。

那么我该如何只使用界面生成器来做到这一点呢?

【问题讨论】:

如果没有比删除你的UIView底部约束更多的文本内容。 @Kuldeep 不会按照 OP 的要求去做。 您是否仅在使用多行标签(行数设置为零)时遇到问题? 其实UIView就是一个table view的header。 @SidGo - 在您的问题中发布完整信息是个好主意...看看这里:***.com/questions/16471846/… 【参考方案1】:

为了使 UILabel 保持其大小并强制外部视图调整大小,您可以将 Content Hugging Priority 的值更新为 1000(也称为必需)。这可以在 Interface Builder 中选择标签时在measurements 面板中完成。

我认为它们被默认设置为750

这应该(如果没有其他原因导致更改)使标签采用其固有的内容大小并强制其超级视图也符合该大小。

【讨论】:

【参考方案2】:

UILabeltoptrailingbottomleadingUIView 对齐(添加约束)。 从 UIView 中移除 heightbottom 约束(如果有)。

如果内容很大,您可能需要将UILabel 包装成UIScrollView 来代替UIView。并将bottom 约束添加到UIScrollView

UILabel(251)的Content Hugging Priority默认大于UIView(250)。验证这一点

【讨论】:

【参考方案3】:

使用自动布局非常简单。只需按照以下步骤操作

1 - 拖动一个 UIView 和align it vertically and horizontally在中心。

2 - 现在将 UILabel 拖入 UIView 和 align the label also horizontally and vertically in centre。现在,IB 将 WRT 中心的标签与超级视图而不是 UIView 对齐。所以,在 size-inspector 部分中更改它。

3 - 完成此操作并删除所有红线后,使用命令键同时选择标签和 UIView。

4 - 现在,给他们如下约束

leading = 0, trailing = 0 并选择equal widthequal height

你已经完成了。如果你想测试 UIView 的大小是否与标签的内容相关,尝试将标签的字体增加到更大的大小,你会看到视图的大小将与标签。

到了,你完成了:-D。希望,这对您有所帮助。

【讨论】:

【参考方案4】:

如果有人遇到此问题,则:

在 UIView 中有 2 个标签 按照这里的建议做所有事情

在我的例子中,我将 BOTH UILabel 的 Vertical Content Hugging Priority 设置为 1000。然后其中一个标签具有不同的字体。 (即一个标签应该比另一个小)

高度不明确,因为两个标签都试图在superview 上强制它们的高度。一旦我降低了较小标签的优先级,一切正常。

【讨论】:

以上是关于如何仅使用情节提要使 UILabel 的 UIView 超级视图适合 UILabel 的固有高度?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建 UILabel 和 UIImageView 以使它们在情节提要文档大纲中为灰色?

如何使用情节提要设置包装文本 UILabel Xcode

更新 UILabel Text 会重置情节提要?

如何在情节提要中为uilabel设置大于300的字体大小?

如何在情节提要中的 UILabel 的右边缘添加前导约束?

使用情节提要中的属性字符串本地化 UILabel