删除NSLayoutConstraint的正确方法

Ant*_*ine 15 xcode ios autolayout nslayoutconstraint swift

在我的应用程序中,我正在使用约束工作,在大多数情况下也使用动画.在某些情况下,我需要删除约束并添加新约束.

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

删除约束的removeConstraint方法是在a上使用该方法UIView.

是否可以创建一个类似的方法

constraint.remove()
Run Code Online (Sandbox Code Playgroud)

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

Ror*_*nel 15

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

@property NSMutableArray *newConstraints;
Run Code Online (Sandbox Code Playgroud)

填写 newConstraints

iOS7和iOS8:

[self.viewToChange addConstraints:self.newConstraints];
[self.viewToChange removeConstraints:self.newConstraints];
Run Code Online (Sandbox Code Playgroud)

或仅限iOS8,使用新机制

[NSLayoutConstraint activateConstraints:self.newConstraints];
[NSLayoutConstraint deactivateConstraints:self.newConstraints];
Run Code Online (Sandbox Code Playgroud)

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

如果您可以识别哪些约束,则还可以从故事板集创建初始列表.


Ant*_*ine 6

我最终使用autoRemovePureLayout库提供的方法:https://github.com/smileyborg/PureLayout

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

这导致了这一个班轮:

containerTopConstraint.autoRemove()
Run Code Online (Sandbox Code Playgroud)