基于多行 UILabel 自动调整 UIView 的大小

Posted

技术标签:

【中文标题】基于多行 UILabel 自动调整 UIView 的大小【英文标题】:Auto resize UIView based on multi line UILabel 【发布时间】:2017-01-05 11:20:07 【问题描述】:

问题: 我有一个带有多行 UILabel 的自定义视图(见下图)。

然后这个自定义视图被添加到我的故事板中的一个屏幕上(见下图)。

这很好用。问题是多行标签在执行时会动态变化几次,然后蓝色的 UIView 框就放不下了。更小/更大的屏幕尺寸也是一个问题。

问题: 那么如何让 UIView 根据 UILabel 的高度自动调整高度呢?是否可以通过 Interface Builder 和 Autolayout 完成? (不是必要的,但我的其他大部分设置都是通过 IB 完成的)

如果需要更多详细信息,请告诉我。

【问题讨论】:

为什么不使用 UIStackView ?你也需要支持 ios 8 吗? @dirtydanee 嗨,不需要支持 iOS 8。我将如何使用 UIStackView 解决这个问题? 我正在看,很快就会通知你。 简单地把它放在表格视图单元格中,然后把tableview.height = UITableViewAutomaticDimension 【参考方案1】:

只要确保自定义视图中的标签固定到所有(标题标签固定到:Leading, Top , 超级视图的尾随和底部到内容标签;内容标签固定到:superview 的前导、底部、尾随和顶部到标题标签)您将有您的 superview 更改根据内容的高度。

另外,请注意,您的 superview 不需要高度 constraint,只需将其固定到前导、底部和尾随边就足够了。

在我的一个应用中,我的视图几乎相同。为了确保高度根据更新发生变化,我会做的是:

customView.setNeedsLayout()
customView.layoutIfNeeded()

您也可以将此代码包装在 UIView.animate(withDuration: ...) 块中

干杯!

【讨论】:

注意,自定义视图必须有一个宽度约束才能工作。

以上是关于基于多行 UILabel 自动调整 UIView 的大小的主要内容,如果未能解决你的问题,请参考以下文章

创建一个基于 UIView 的子视图自动调整大小的视图

动画父 UIView 的框架(大小)时自动调整 UILabel 的框架

具有自动布局的多行UILabel,如何在不更改标签框架的情况下根据内容调整字体大小?

UIlabel多行文字自动换行 (自动折行)

iOS - 带约束的多行 UILabel 高度

UIView 中的自动布局 UILabel