Reputation: 23976
In my apps I'm working a lot with constraints, in most cases with animations as well. In certain circumstances I need to remove constraints and add new ones.
As I need to support iOS 7 as well, I'm not able to use the active
property, which would else be the solution for me.
The way to remove constraints is to use the removeConstraint
method on a UIView
.
Is it possible to create a method like
constraint.remove()
so you don't have to know which view is taking care over the constraint?
Upvotes: 15
Views: 12283
Reputation: 23976
I've ended up using the method autoRemove
provided by the PureLayout
library: https://github.com/smileyborg/PureLayout
This method finds the commonSuperview using the firstItem or secondItem and removes the constraint from the correct view.
It resulted in this one liner:
containerTopConstraint.autoRemove()
Upvotes: 6
Reputation: 8014
What I do is create arrays of the constraints that I wish to be able to add/remove and simply use the following:
@property NSMutableArray *newConstraints;
Fill up the newConstraints
iOS7 and iOS8:
[self.viewToChange addConstraints:self.newConstraints];
[self.viewToChange removeConstraints:self.newConstraints];
or iOS8 only, use the new mechanism
[NSLayoutConstraint activateConstraints:self.newConstraints];
[NSLayoutConstraint deactivateConstraints:self.newConstraints];
With this you can apply a set, remove the set and apply a new set.
You can also create the initial list from the storyboard set if you can identify which constraints are which.
Upvotes: 17
Reputation: 14063
No, not that I'm aware of. The automatic managing of the host view only came in iOS8.
An ugly implementation could loop over all constraints of all views to finde the view where it is on.
But normally it shouldn't be to hard to manage the constrains in a way that you always know on which view they are defined.
Upvotes: 0