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

4

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

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

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

然而,如果我现在使用自动布局,需要在代码中动态更新NSLayoutConstraint对象,我不知道应该把self.demoWidthConstraint = 10这样的代码放到哪里。

3个回答

9

您可以在任何位置调整现有的约束条件,只需调用layoutIfNeeded

要对更改进行动画处理,例如:

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

2
你需要保留对约束的引用。最简单的方法是在Xcode中创建IBOutlet属性并将其链接到界面构建器中的约束。
如果你在代码中创建和应用约束,你需要编写更多的代码,但会更加灵活,特别是对于添加和删除的视图。
在这种情况下,一个简单的属性就可以解决问题。你将从viewDidMoveToSuperview方法中的一些样板代码中受益。检查superview是否为空。如果不为空,则检查约束属性是否为空。如果为空,则创建它。然后将其添加到superview中。
每当需要调整约束时,请通过属性的约束属性进行调整。
当视图从superview中移除时,还需要一些样板代码。首先删除约束,然后将其设置为nil。
现在,当你的视图在使用时,你的约束将始终存在,并且可以根据需要调整常量或乘数。

0

您可以在视图控制器的几乎任何地方替换约束或动态修改它们的常量。例如,您可以在操作方法中修改约束的常量。这些更改甚至可以进行动画处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接