I keep references to my NSLayoutConstraint
var flag = true
@IBOutlet weak var myConstraint: NSLayoutConstraint!
Then for some @IBAction
I activate/deactivate depending on my flag
variable:
@IBAction func tapped(sender: UIButton) {
flag = !flag
UIView.animateWithDuration(1.0) {
if self.flag {
NSLayoutConstraint.activateConstraints([self. myConstraint])
} else {
NSLayoutConstraint.deactivateConstraints([self. myConstraint])
}
}
}
But when I call my action once again, I have an error unexpectedly found nil while unwrapping an Optional value
for myConstrain
.
More over it doesn't animate. What am I doing wrong?
I follow tutorial from WWDC 2015:
Deactivating a constraint is same as calling removeConstraint:
for a view. Refer the documentation. So when you remove an object which has weak
reference will cause the object deallocation for it. Now this object is nil
and activating it won't have any effect at all. To solve the issue you need to have a strong reference to constraint object.
@IBOutlet strong var myConstraint: NSLayoutConstraint!