Переключение ограничения при определенном условии


Настройка: я разработал 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 3

1 ответ:

Похоже, что при использовании IB есть ошибка, когда установка свойства ограничения как деинсталлированного не всегда будет работать должным образом как "неактивный", но скорее это создаст проблемы при активации/деактивации данного ограничения.

В качестве обходного решения всегда отмечайте ограничения как установленные, но для тех ограничений, которые должны быть неактивными при загрузке, перейдите к атрибутам среды выполнения Identity inspector / user defined и добавьте "active" как логическое значение false (непроверено)

Нашел решение здесь: https://stackoverflow.com/a/33079428/691868