4

如果我需要更新视图的框架,我可以将该代码放入-(void)viewWillLayoutSubviews如下:

- (void)viewWillLayoutSubviews {
    self.demoView.frame = CGRectMake(0, 0, 10, 10);
}

或在视图的方法- (void)layoutSubviews中。

但是,如果我现在使用自动布局,并且我需要NSLayoutConstraint在代码中更新对象动态,我不知道将代码放在哪里self.demoWidthConstraint = 10

4

3 回答 3

9

您可以在任何地方调整现有约束,layoutIfNeeded然后调用。

要为更改设置动画,例如:

self.demoConstraint.constant = 10;
[UIView animateWithDuration:duration animations:^(void) {
    [self.view layoutIfNeeded];
}];
于 2013-10-16T08:43:39.030 回答
2

您需要保留对约束的引用。最简单的方法是在 Xcode 中创建一个 IBOutlet 属性并将其链接到界面构建器中的约束。

如果您在代码中创建和应用约束,您将编写更多代码但具有更大的灵活性。特别是对于添加和删除的视图。

在这种情况下,一个简单的属性将起作用。您将从视图的 viewDidMoveToSuperview 方法中的一些样板代码中受益。如果 superview 为零,请检查那里。如果不是 nil,则检查约束属性是否为 nil。如果为零,则创建它。然后将其添加到superview。

需要时通过属性的约束属性调整约束。

如果从父视图中删除视图时的样板代码,则再多一点。首先删除约束,然后将其设置为 nil。

现在,当您的视图在使用时,您的约束将始终存在,您可以根据需要调整常量或乘数。

于 2013-10-16T09:26:43.643 回答
0

您几乎可以在视图控制器中的任何位置动态替换约束或修改它们的常量。例如,您可以在操作方法中修改约束的常量。变化甚至可以被动画化。

于 2013-10-16T05:32:00.507 回答