У меня простой вопрос, но я не смог найти никакой информации в документации.
Что происходит с ограничениями макета, когда представление удаляется из иерархии представлений (или перемещается в другое представление)?
Например, у нас есть контейнер C
с подпредставлениями A
и B
. Контейнер C
имеет некоторые ограничения. Потом звоним [A removeFromSuperview]
. Что происходит с ограничениями для A
?
Что же произойдет , если мы добавим A
к C
снова?
ios
autolayout
nslayoutconstraint
Султан
источник
источник
Поскольку у меня тоже был этот вопрос, я просто проверил Apple Docs, и оказалось, что это задокументировано, что ограничения удалены.
В документации для метода UIView removeFromSuperview указано:
Я не уверен, было ли это задокументировано в прошлом году, когда был опубликован исходный вопрос, но я просто подумал, что поделюсь этой информацией на случай, если она кому-то понадобится ...
источник
Однако имейте в виду, что если у вас есть два независимых родительских представления A и B и подпредставление C, где C в настоящее время является подпредставлением A с соответствующими ограничениями, то вызов [B addSubview: C] НЕ удалит никаких ограничений, относящихся к A и C, и автоматическая компоновка начнет генерировать исключения, потому что эти ограничения больше не относятся к представлениям в той же иерархии.
Вам нужно будет явно вызвать [C removeFromSuperview], чтобы удалить ограничения, прежде чем добавлять C к B.
Это верно для Mac OS X - я не проверял iOS
источник
Ограничения также снимаются, когда вы
[A removeFromSuperview]
Они забыты, и добавление A к C снова не добавляет ограничений.
источник
Они тоже удаляются, можно сделать простой тест. Выберите представление SUBVIEW и создайте ограничения, которые ограничивают SUBVIEW, чтобы он следовал за изменением размера его суперпредставления (например, прикрепленным к краям супервизора). Для этого вы добавляете SUBVIEW в качестве подпредставления к этому CONTAINERVIEW и добавляете в качестве ограничений что-то вроде этого:
V: | - [SUBVIEW] - |
H: | - [ПОДРОБНЕЕ] - |
Эти ограничения должны быть добавлены в супервизор SUBVIEW, таким образом CONTAINERVIEW.
Если вы удалите SUBVIEW, просто проверив все ограничения CONTAINERVIEW, вы увидите, что двух больше нет.
источник
Этот вопрос также может быть подтвержден конструктором интерфейсов. Когда перетащите и опустите
UIView
наViewController
добавление ограничений, а затем удалитеUIView
, вы увидите, что синие ограничения исчезнут.источник