Переключение ограничения при определенном условии
Настройка: я разработал 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