1

我有一个应用程序,其 UI 设置如下

V:[statusBarView][contentView][footerView]

虽然我在 IB 中做了布局(见下文)。statusBarView 和 footerView 的高度固定,并且它们的顶部/底部空间(分别)与父视图(VC 的视图)齐平。

在屏幕截图中,您可以看到当屏幕旋转并重绘视图时,中间的 contentView 容器及其子视图会调整大小并正确布局。

我将这些按钮之一的操作设置为调整(蓝色)footerView 的大小。我的期望是,由于设置了约束,因此 contentView 的底部等于 footerView 的顶部,如果我调整页脚的大小,contentView 将自行处理它的大小调整。这没有发生。无论我是否使 footerView 更高或更短,或者将其向上或向下移动,contentView 都保持不变。

我试过 setNeedsUpdateConstraints、setNeedsLayout 等,但都没有效果。

也许我完全错过了自动布局的重点,或者只是如何实现它。为什么当窗口/超级视图更改时视图能够正确布局,而不是约束实际依赖的兄弟视图?

谢谢

默认垂直布局 默认水平布局

4

2 回答 2

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];
于 2012-10-09T19:26:13.887 回答
0

定义一个 IBOutlet 以引用页脚的高度约束。当改变它的值时,它也应该改变内容视图的高度。

于 2012-12-01T16:52:02.467 回答