基于多行 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 的框架(大小)时自动调整 UILabel 的框架