如何确保 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 只占用它需要的空间,而不需要额外的填充?的主要内容,如果未能解决你的问题,请参考以下文章
您何时需要为标签和按钮添加内容以防止它们占用文本字段的空间?