如何确保 UILabel 只占用它需要的空间,而不需要额外的填充?

Posted

技术标签:

【中文标题】如何确保 UILabel 只占用它需要的空间,而不需要额外的填充?【英文标题】:How do I ensure UILabel only takes the space it requires, without extra padding? 【发布时间】:2020-05-08 13:37:29 【问题描述】:

在处理我的标签时,我遇到了一个特殊的问题,即在垂直堆栈视图中,然后是水平堆栈视图。

水平堆栈视图应该是基于标签内容的动态高度。我已经尝试过之前提到的其他解决方案,例如将标签(以及也在水平堆栈视图中的图像)嵌入到单独的 UIView 中并将标签固定到边缘。

问题是,当标签设置为 0 时 - 标签会超出其要求,在标签上方和下方添加填充。

我确实验证了这不是堆栈视图从 imageView 下方开始的约束的问题,因为在将堆栈视图对齐到“顶部”时警告标签正确地向上浮动,但标签仍保持居中。

故事板中的所有内容都已在没有代码的情况下完成。

看看图片,也许有人可以帮助我并了解我如何解决这个问题。

想要的效果

运行应用程序时会发生什么

通过对齐顶部来验证堆栈视图是否正确固定到图像视图

涉及的约束

底部层次结构中的第二个stackview只是在设计阶段填充空白空间。我认为这不会导致问题。

【问题讨论】:

【参考方案1】:

您可以通过调用yourLabel.sizeToFit()来实现此目的

Above 将根据您的文本占用的空间量动态调整标签的高度。

【讨论】:

我应该在某个特定的地方称呼它吗?我在 viewDidLoad() 中尝试过,但没有任何区别:( 尝试在 viewDidLayoutSubviews() 中调用 作为参考,这篇文章很好地解释了 viewcontroller 生命周期,包括你应该在哪里更改 uiviews:medium.com/good-morning-swift/…【参考方案2】:

我猜实际上你在底部的第二个 stackView 也是你问题的一部分。如果您将垂直堆栈视图固定到图像的底部(TOP 约束),但您也将其固定到屏幕底部(BOTTOM 约束),您的垂直堆栈视图会尝试拉伸其内容。这就是标签有额外空间的原因。

你可以做什么:摆脱那个底部约束(不要给垂直stackView底部约束)或者最好将警告标签的垂直内容拥抱优先级设置为更大的值。

【讨论】:

【参考方案3】:

这里,警告UILabel 正在占用剩余的可用空间,请尝试在您为后期开发保留的第二个堆栈视图中添加一个空的UIView。这就像一个间隔视图。

另外,不要忘记在viewDidLoad() 中调用warningLabel.sizeToFit()

【讨论】:

以上是关于如何确保 UILabel 只占用它需要的空间,而不需要额外的填充?的主要内容,如果未能解决你的问题,请参考以下文章

单行文本在 UILabel 中占用两行

如何以编程方式将文本添加到 UIView

如何使表格列的宽度仅占用省略号溢出的必要空间?

您何时需要为标签和按钮添加内容以防止它们占用文本字段的空间?

UILabel - iOS 8 Xcode 6.3 中的单行文本占用 2 行

如何有条件地显示一个元素,保持其占用空间?