删除NSLayoutConstraint

时间:2015-05-07 13:10:44

标签: ios xcode swift autolayout nslayoutconstraint

在我的应用中,我在限制条件下工作很多,大多数情况下还有动画。在某些情况下,我需要删除约束并添加新约束。

由于我还需要支持iOS 7,我无法使用active属性,这对我来说也是解决方案。

删除约束的方法是在removeConstraint上使用UIView方法。

是否可以创建类似

的方法
constraint.remove()

所以你不必知道哪个观点正在关注约束?

3 个答案:

答案 0 :(得分:15)

我所做的是创建我希望能够添加/删除的约束数组,并简单地使用以下内容:

@property NSMutableArray *newConstraints;

填写newConstraints

iOS7和iOS8:

[self.viewToChange addConstraints:self.newConstraints];
[self.viewToChange removeConstraints:self.newConstraints];

或仅限iOS8,使用新机制

[NSLayoutConstraint activateConstraints:self.newConstraints];
[NSLayoutConstraint deactivateConstraints:self.newConstraints];

使用此功能,您可以应用一组,删除该组并应用一个新组。

如果您可以确定哪些约束是哪个,您还可以从故事板集创建初始列表。

答案 1 :(得分:6)

我最终使用了autoRemove库提供的方法PureLayouthttps://github.com/smileyborg/PureLayout

此方法使用firstItem或secondItem查找commonSuperview,并从正确的视图中删除约束。

这导致了这一个班轮:

containerTopConstraint.autoRemove()

答案 2 :(得分:0)

不,不是我意识到的。主机视图的自动管理仅在iOS8中进行。

丑陋的实现可以遍历所有视图的所有约束,以查找它所在的视图。

但通常不应该以一种你总是知道它们被定义的视图的方式来管理约束。