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

How to set layout constraints for variable hight calculated at run time?

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

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

因为如果屏幕宽度改变,子视图的高度也会改变,因为我已经固定了它们的纵横比。

截至目前,我已将红色超级视图的高度固定。 但我希望它根据其中所有子视图的总高度而变化。

这是我的 viewcontroller 的屏幕截图及其预览。

正如你所看到的,由于红色超级视图的高度固定,还剩下一些 space。

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

主红色 SuperView

**第一个(顶部)、第二个(中间)、第三个(底部)子视图分别为**

  1. 如果您还没有为红色视图的高度限制添加一个出口。

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

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

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

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

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

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

红景

UIView 顶部

UIView中

UIView 底部

希望对您有所帮助。