根据内容自动设置自定义 UIView 的高度?
Posted
技术标签:
【中文标题】根据内容自动设置自定义 UIView 的高度?【英文标题】:Automatically set height of custom UIView based on its contents? 【发布时间】:2015-06-26 09:09:53 【问题描述】:在问这个问题之前,我花了很多时间阅读其他问题,但还没有设法解决这个问题——希望有人能提供帮助。
我有一个自定义警报视图,一个 UIView
子类。我试图让它进入一个宽度固定的状态,它的高度根据它的两个标签(title
和message
)的高度动态增长,并且可以设置动态数量的操作按钮跟上。
我使用 AutoLayout 来设置控件,效果很好,但现在我仍然在其初始化程序中手动设置视图本身的框架。
我需要做的是让视图的高度由我的两个标签和 n 个按钮的高度加上它们之间的间距来计算。
我尝试为我的视图提供intrinsicContentSize
,但该方法从未被调用,甚至不要求它,所以我不知道如何继续。
总结一下:我可能需要 ios9 的 UIStackView
,但我没有那么奢侈,所以我需要在 iOS 7 / 8 中加入类似的东西。我看过 OAStackView
,但我不想使用外部依赖。
【问题讨论】:
您可以尝试为视图创建一个高度限制的出口,然后根据标签的高度管理heightContraint.constant
。
何时更新约束?我不确定这些标签的高度是什么时候计算出来的。
尝试在viewDidLayoutSubViews中设置
【参考方案1】:
快速思考一下:您是否尝试过在 Interface Builder 中创建视图?给它一个固定宽度,优先级:1000。不添加高度约束,但在其父视图中垂直居中。
然后将View的垂直内容拥抱优先级和垂直内容抗压优先级设置为1000。
这应该会导致视图根据其子视图计算自己的高度。您只需要确保子视图以一种定义高度的方式绑定到父视图,而不会产生任何歧义。
【讨论】:
我最初没有这样做的唯一原因是按钮的数量可以是动态的。我还能用 IB 处理吗? 也许您可以使用 UITableView 并将每个按钮放在一个单元格中来执行此操作。这会很痛苦,因为您必须实现所有 Tableview/Tableviewcell 等。如果您有最大数量的按钮,您可以通过在 IB 中添加此数量的按钮并在不需要时将其高度约束设置为 0 来解决此问题.不是很好的风格,但应该可以。以上是关于根据内容自动设置自定义 UIView 的高度?的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 标题部分的高度不会为自定义 UIView() 类自动调整
如何使用自动布局在 UIScrollView 中为视图高度设置动画?