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

Posted

技术标签:

【中文标题】在哪里更新自动布局常量?【英文标题】:where to update auto layout constant? 【发布时间】:2013-10-16 05:19:26 【问题描述】:

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

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

或者在view的方法- (void)layoutSubviews.

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

【问题讨论】:

【参考方案1】:

您可以在任何地方调整现有约束,之后只需致电layoutIfNeeded

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

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

【讨论】:

【参考方案2】:

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

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

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

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

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于在哪里更新自动布局常量?的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 UITableViewCell 约束常量并更新单元格高度

键盘显示时更改自动布局常量

如何设置自动布局约束常量通用或设备特定?

动态调整 collectionViewCell 的常量以在自动布局中使用

上边距(自动布局)

UICollectionViewCell 中的自动布局宽度常量无法正常工作