Переключение ограничения при определенном условии
Настройка: я разработал UIButton
с нижним constraint
X, приоритет 999. В дополнение к этому constraint
UIButton
также имеет другой constraint
Y, приоритет 1000, но этот помечен installed = false
.
Y связывается с @IBOutlet
в моем UIViewController
с сильной ссылкой.
On viewDidLoad()
: Если данное условие оказывается истинным, я активирую constraint
Y, делая Y.isActive = true
, а затем view.layoutIfNeeded()
, который в конечном итоге вызывает updateConstraints()
, Если это необходимо. Если условие ложно, я ничего не делаю.
Мое ожидание: когда условие истинно, я ожидаю, что представление применит Y constraint
к кнопке и отбросит X. Когда условие ложно, я ожидаю, что UIButton
будет иметь только constraint
X.
Результат: кажется, что constraint
Y не применяется вообще, даже когда условие выполнено.
Спасибо.
P.S. Я использую swift, но не возражаю, если ответ будет в Obj-C.
1 ответ:
Похоже, что при использовании IB есть ошибка, когда установка свойства ограничения как деинсталлированного не всегда будет работать должным образом как "неактивный", но скорее это создаст проблемы при активации/деактивации данного ограничения.
В качестве обходного решения всегда отмечайте ограничения как установленные, но для тех ограничений, которые должны быть неактивными при загрузке, перейдите к атрибутам среды выполнения Identity inspector / user defined и добавьте "active" как логическое значение false (непроверено)
Нашел решение здесь: https://stackoverflow.com/a/33079428/691868