如果我需要更新视图的框架,我可以将该代码放在-(void)viewWillLayoutSubviews
中,如下所示:
- (void)viewWillLayoutSubviews {
self.demoView.frame = CGRectMake(0, 0, 10, 10);
}
或在视图的方法- (void)layoutSubviews
中。
但是,如果我现在使用autolayout,并且我需要在代码中更新NSLayoutConstraint
对象动态,我不知道将代码放在何处self.demoWidthConstraint = 10
答案 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)
您可以在视图控制器中的几乎任何位置动态替换约束或修改其常量。例如,您可以在操作方法中修改约束的常量。变化甚至可以动画。