A pergunta que tenho é simples mas não consegui encontrar nenhuma informação na documentação.
O que acontece com as restrições de layout quando uma visualização é removida da hierarquia de visualização (ou movida para outra visualização)?
Por exemplo, vamos ter um container C
com subvisualizações A
e B
. O contêiner C
contém algumas restrições. Então ligamos [A removeFromSuperview]
. O que acontece com as restrições A
?
O que acontece então se somarmos A
a C
de novo?
ios
autolayout
nslayoutconstraint
Sulthan
fonte
fonte
Como eu também tinha essa dúvida, verifiquei o Apple Docs apenas por diversão e descobri que está documentado que as restrições foram removidas.
A documentação para o método UIView removeFromSuperview afirma:
Não tenho certeza se isso foi documentado no ano passado, quando a pergunta original foi postada, mas pensei em compartilhar essas informações caso alguém precisasse ...
fonte
Esteja ciente, porém, que se você tiver duas visualizações pai independentes A e B, e uma subvisualização C, onde C é atualmente uma subvisão de A, com restrições apropriadas, que chamar [B addSubview: C] NÃO limpará quaisquer restrições relacionadas a A e C, e o layout automático começará a lançar exceções, porque essas restrições não estão mais relacionadas a visualizações na mesma hierarquia.
Você precisará chamar [C removeFromSuperview] explicitamente para remover as restrições, antes de adicionar C a B.
Isso é verdade no Mac OS X - eu não verifiquei o iOS
fonte
As restrições também são removidas quando você
[A removeFromSuperview]
Eles são esquecidos e adicionar A a C novamente não adiciona restrições.
fonte
Eles também são removidos, você pode fazer um teste simples. Escolha uma visão SUBVIEW e crie restrições que restrinjam SUBVIEW a seguir seu redimensionamento de superview (como anexado às bordas de superview). Para fazer isso, você adiciona SUBVIEW como uma subvisão a este CONTAINERVIEW e adiciona como restrições algo como:
V: | - [SUBVIEW] - |
H: | - [SUBVIEW] - |
Essas restrições devem ser adicionadas ao superview de SUBVIEW, ou seja, CONTAINERVIEW.
Se você remover SUBVIEW simplesmente checando todas as restrições CONTAINERVIEW, você verá que dois não estão mais por perto.
fonte
Esta questão também pode ser comprovada pelo construtor de interface. Ao arrastar e soltar um
UIView
nasViewController
restrições de adição e depois remover oUIView
, você pode ver as restrições azuis desaparecerem.fonte