如何为运行时计算的变量高度设置布局约束?

Posted

技术标签:

【中文标题】如何为运行时计算的变量高度设置布局约束?【英文标题】:How to set layout constraints for variable hight calculated at run time? 【发布时间】:2015-05-29 09:42:31 【问题描述】:

我有一个带有 3 个 UIViews 作为其子视图的 UIView。我已将这些子视图的布局约束设置为固定纵横比。也就是说,如果屏幕尺寸发生变化,它们的宽度会发生变化,但纵横比将始终保持不变。

现在我还使 UIView 的宽度(屏幕截图中显示的红色)随着屏幕尺寸的变化而变化。 但我正在努力限制这个视图的高度。我想要的是它的高度应该根据它里面的子视图的总高度来设置。

因为子视图的高度会随着屏幕宽度的变化而变化,因为我已经固定了它们的纵横比。

到目前为止,我已经修复了 Red superview 的高度。 但我希望它根据其中所有子视图的总高度而变化。

这是我的视图控制器及其预览的屏幕截图。

如您所见,由于红色超级视图的高度固定,还剩余一些空间。

到目前为止我添加的约束的详细信息如下。

主红色超级视图

**1st(顶部)、2nd(中间)、3rd(底部)子视图分别**

【问题讨论】:

正如@Bannings 在他的回答中所说,删除红色视图上的高度约束并简单地为您的第三个视图添加一个底部约束到红色视图。你与你所拥有的 8^) 如此接近。 【参考方案1】:

您可以从第三个视图添加一个底部约束到其父视图,然后您必须删除父视图的固定高度约束。

【讨论】:

【参考方案2】:

    如果你还没有为红色视图的高度约束添加一个出口。

    如果您在 viewDidLoad 中执行此操作,请在控制器的视图中调用 layouIfNeeded。

    调用每个子视图、setNeedUpdateConstraints 和 layoutIfNeeded。

    然后计算你想要的红色视图的高度(我会做 3*subview.frame.size.height + topPadding + bottomPadding)并将红色视图的高度 xconstraint 常量设置为此。

    在红色视图上调用 setNeedUpdateConstraints 和 layoutIfNeeded。

【讨论】:

【参考方案3】:

支持所有分辨率的相同行为。您需要按如下方式设置布局。

红色视图

UIView 顶部

UIView 中间

UIView 底部

希望对你有所帮助。

【讨论】:

以上是关于如何为运行时计算的变量高度设置布局约束?的主要内容,如果未能解决你的问题,请参考以下文章

如何为较小的设备更改 UIImageView 的高度?

如何为 Xib 设置单元格动态高度的约束...?

运行时自动布局的 UIButton 大小

如何为嵌入在另一个堆栈视图中的堆栈视图设置顶部布局约束?

如何为具有动态高度的表格单元格正确设置自动布局?

如何为具有约束的 UIView 设置动画?