Активация и деактивация ограничений без обновления рамки просмотра

У меня есть подпредставление, которое содержит метку и кнопку, однако кнопка не всегда нужна. Если требуется кнопка, метка должна отображаться вверху, а кнопка внизу экрана. Если кнопка не нужна, метка должна отображаться в середине представления.

Для этого у меня есть три ограничения, которые я изменяю:

  1. Нижняя часть метки для верхней части кнопки равна 0. (Constraint1)
  2. Подпись к нижней части кнопки больше или равна 0 (Constraint3)
  3. Высота кнопки (Constraint3)

ПРИМЕЧАНИЕ. Метка имеет верхнее ограничение с представлением, установленным на 0, а кнопка имеет нижнее ограничение с представлением, установленным на 0. Они остаются неизменными.

ПРИМЕЧАНИЕ. Все ограничения установлены для установки, а высота кнопки составляет 42 во время сборки.

Если требуется кнопка, Constraint1 удаляется, а Constraint3 устанавливается на 42.

Если кнопка не нужна, Constraint1 устанавливается и Constraint3 устанавливается в 0.

Как вы можете видеть, это работает на раскадровке, как и ожидалось. Однако в коде поведение не отражается. Если кнопка нужна, я пытаюсь это:

constraint3.constant = 42
self.view.removeConstraint(constraint1)
self.view.updateConstraints

Но вместо ожидаемого результата я получаю результат, как будто ограничение никогда не снималось:

Я удаляю ограничение в раскадровке, и оно выглядит правильно, но когда я удаляю ограничение в коде, оно не... Что неправильно / отсутствует в моем коде, чтобы это работало должным образом?

1 ответ

Решение

Изменить это

self.view.removeConstraint(constraint1)

в

parentView.removeConstraint(constraint1)
self.view.layoutIfNeeded()

Это ограничение необходимо удалить из родительского представления как метки, так и кнопки, которая содержит это ограничение

Другие вопросы по тегам