如何使用自动布局根据其子视图调整父视图的高度

时间:2014-06-17 03:18:53

标签: ios autolayout

我已经切割了一个视图,其子视图的高度将动态变化(我通过更改约束来改变高度)。 我的目的是让视图的高度调整到其子视图的高度,所以我不会关心任何事情,这就是自动布局的目的。

实际上,无法在IB中向根视图添加任何约束。 我发现我仍然可以改变根视图的框架,这似乎能够解决我当前的问题。但我不认为建议复合自动布局和框架。

那么,还有其他建议吗?

2 个答案:

答案 0 :(得分:0)

使用旧的布局系统(即自动调整和框架设置)获得一些视图是完全正确的,而其他视图直接使用自动布局。要记住的重要一点是在使用自动布局的代码中实例化的视图上将translatesAutoresizingMaskIntoConstraints属性设置为NO

但是,您无法在视图控制器的根视图上使用自动布局。

使用自动布局,子视图可以决定其超级视图的大小 - 但如果超级视图使用自动调整和框架设置,这将不起作用。

我不知道你正在使用的根视图是场景的主视图控制器的根视图还是子视图控制器的根视图。如果是前者,我不建议在iOS 7中调整根视图的框架。只需让根视图填满整个屏幕(这是它的默认行为)。

答案 1 :(得分:-1)

子视图的大小由他们的超级视图决定,而不是相反。对于你的特殊情况,我会让子视图将其高度变化委托给superview。然后你可以调整超视图的矩形(并避免完全改变子视图的高度),我会这样做:

  1. 创建视图控制器的子视图,其作为新的调整大小父级。然后viewController.view可以保持全屏。您的视图层次结构将是viewController.view->调整父级大小 - >;调整子级大小。
  2. 为要修改的约束创建IBOutlet。
  3. 为子视图创建协议,以将调整大小回调发送到其父级。
  4. 收到回调时更新父级的约束常量。
  5. 您不必修改子视图的高度,因为约束将为您执行此操作。