【问题标题】:Automatically set height of custom UIView based on its contents?根据内容自动设置自定义 UIView 的高度?
【发布时间】:2015-06-26 09:09:53
【问题描述】:

在问这个问题之前,我花了很多时间阅读其他问题,但还没有设法解决这个问题——希望有人能提供帮助。

我有一个自定义警报视图,一个 UIView 子类。我试图让它进入一个宽度固定的状态,它的高度根据它的两个标签(titlemessage)的高度动态增长,并且可以设置动态数量的操作按钮跟上。

我使用 AutoLayout 来设置控件,效果很好,但现在我仍然在其初始化程序中手动设置视图本身的框架。

我需要做的是让视图的高度由我的两个标签和 n 个按钮的高度加上它们之间的间距来计算。

我尝试为我的视图提供intrinsicContentSize,但该方法从未被调用,甚至不要求它,所以我不知道如何继续。

总结一下:我可能需要 iOS9 的 UIStackView,但我没有那么奢侈,所以我需要在 iOS 7 / 8 中加入类似的东西。我看过 OAStackView,但我不想使用外部依赖。

【问题讨论】:

  • 您可以尝试为视图创建一个高度限制的出口,然后根据标签的高度管理heightContraint.constant
  • 何时更新约束?我不确定这些标签的高度是什么时候计算出来的。
  • 尝试在viewDidLayoutSubViews中设置

标签: ios uiview autolayout


【解决方案1】:

快速思考一下:您是否尝试过在 Interface Builder 中创建视图?给它一个固定宽度,优先级:1000。不添加高度约束,但在其父视图中垂直居中。

然后将View的垂直内容拥抱优先级和垂直内容抗压优先级设置为1000。

这应该会导致视图根据其子视图计算自己的高度。您只需要确保子视图以一种定义高度的方式绑定到父视图,而不会产生任何歧义。

【讨论】:

  • 我最初没有这样做的唯一原因是按钮的数量可以是动态的。我还能用 IB 处理吗?
  • 也许您可以使用 UITableView 并将每个按钮放在一个单元格中来执行此操作。这会很痛苦,因为您必须实现所有 Tableview/Tableviewcell 等。如果您有最大数量的按钮,您可以通过在 IB 中添加此数量的按钮并在不需要时将其高度约束设置为 0 来解决此问题.不是很好的风格,但应该可以。
猜你喜欢
  • 2019-02-28
  • 1970-01-01
  • 2016-01-14
  • 2019-01-23
  • 2014-12-09
  • 2017-07-27
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多