Как активировать ранее отключенное ограничение?
Я храню ссылки на мои NSLayoutConstraint
var flag = true
@IBOutlet weak var myConstraint: NSLayoutConstraint!
Тогда для некоторых @IBAction
Я активирую / деактивирую в зависимости от моего flag
переменная:
@IBAction func tapped(sender: UIButton) {
flag = !flag
UIView.animateWithDuration(1.0) {
if self.flag {
NSLayoutConstraint.activateConstraints([self. myConstraint])
} else {
NSLayoutConstraint.deactivateConstraints([self. myConstraint])
}
}
}
Но когда я снова называю свое действие, у меня появляется ошибка unexpectedly found nil while unwrapping an Optional value
за myConstrain
,
Более того, это не оживляет. Что я делаю неправильно?
Я следую учебному пособию WWDC 2015:
1 ответ
Решение
Деактивация ограничения аналогична вызову removeConstraint:
для просмотра. Обратитесь к документации. Поэтому, когда вы удаляете объект, который имеет weak
ссылка вызовет освобождение объекта для него. Теперь этот объект nil
и активация этого не будет иметь никакого эффекта вообще. Чтобы решить эту проблему, вы должны иметь сильную ссылку на объект ограничения.
@IBOutlet strong var myConstraint: NSLayoutConstraint!