我有一个应用程序,其UI设置如下
V:[statusBarView][contentView][footerView]
虽然我在IB中做了布局(见下文)。 statusBarView和footerView的高度固定,它们的顶部/底部空格(分别)与父视图(VC的视图)齐平。
在屏幕抓取中,您可以看到当屏幕旋转并且视图重绘时,中间contentView容器及其子视图的大小调整并正确布局。
我对其中一个按钮的操作设置为调整(蓝色)footerView的大小。我的期望,因为约束设置使得contentView的底部等于footerView的顶部,如果我调整页脚大小,contentView将自己处理它的大小调整。这不会发生。无论我是否将footerView设置为更高或更短或向上或向下移动,contentView都保持不变。
我尝试过setNeedsUpdateConstraints,setNeedsLayout等,但它们没有效果。
也许我完全忽略了自动布局的重点,或者只是如何实现它。为什么视图能够在窗口/超级视图发生变化时使布局正确,而不是约束实际依赖的兄弟视图?
由于
答案 0 :(得分:0)
当您尝试调整页脚大小时,您只是设置框架,还是更新约束?
您应该能够用新的高度约束替换高度约束(具有更新的高度)。在下面的代码中,我使用这种技术来更改名为_leftNavBar的视图的主要值,该视图直接位于self.view中。您应该能够非常轻松地修改它以找到高度约束,并在其上设置新值。
[self.view.constraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *con, NSUInteger idx, BOOL *stop) {
if ([con.firstItem isEqual:_leftNavBar]
&& [con.secondItem isEqual:self.view]
&& con.firstAttribute == NSLayoutAttributeLeading
&& con.secondAttribute == NSLayoutAttributeLeading) {
[self.view removeConstraint:con];
}
}];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:_leftNavBar
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeLeading
multiplier:1.0f
constant:(newLeftNavX - self.getLeftNavBarWidth)]];
[self.view setNeedsUpdateConstraints];
答案 1 :(得分:0)
定义IBOutlet以引用页脚的高度约束。 更改它的值时,它也应该更改内容视图的高度。