在哪里更新自动布局常量?

时间:2013-10-16 05:19:26

标签: ios ios6 ios7 autolayout

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

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

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

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

3 个答案:

答案 0 :(得分:9)

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

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

self.demoConstraint.constant = 10;
[UIView animateWithDuration:duration animations:^(void) {
    [self.view layoutIfNeeded];
}];

答案 1 :(得分:2)

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

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

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

根据需要,通过属性的约束属性调整约束。

如果从superview中删除视图的样板代码,还有一点。 首先删除约束,然后将其设置为nil。

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

答案 2 :(得分:0)

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