La question que j'ai est simple mais je n'ai trouvé aucune information dans la documentation.
Que se passe-t-il avec les contraintes de mise en page lorsqu'une vue est supprimée de la hiérarchie des vues (ou déplacée vers une autre vue)?
Par exemple, ayons un conteneur C
avec des sous-vues A
et B
. Le conteneur C
contient certaines contraintes. Ensuite, nous appelons [A removeFromSuperview]
. Que se passe-t-il avec les contraintes A
?
Que se passe-t-il alors si nous ajoutons A
à C
nouveau?
la source
Depuis que j'ai aussi cette question, j'ai vérifié les documents Apple juste pour les coups de pied, et il s'avère qu'il est documenté que les contraintes sont supprimées.
La documentation de la méthode UIView removeFromSuperview indique:
Je ne sais pas si cela a été documenté l'année dernière lorsque la question originale a été publiée, mais j'ai juste pensé partager cette information au cas où quelqu'un en aurait besoin ...
la source
Sachez cependant que si vous avez deux vues parent indépendantes A et B, et une sous-vue C, où C est actuellement une sous-vue de A, avec des contraintes appropriées, cet appel à [B addSubview: C] n'effacera PAS les contraintes relatives à A et C, et la mise en page automatique commencera à lever des exceptions, car ces contraintes ne se rapportent plus aux vues de la même hiérarchie.
Vous devrez appeler [C removeFromSuperview] explicitement pour supprimer les contraintes, avant d'ajouter C à B.
C'est vrai sur Mac OS X - je n'ai pas vérifié iOS
la source
Les contraintes sont également supprimées lorsque vous
[A removeFromSuperview]
Ils sont oubliés et l'ajout de A à C n'ajoute à nouveau aucune contrainte.
la source
Ils sont également supprimés, vous pouvez faire un simple test. Choisissez une vue SUBVIEW et créez des contraintes de coût qui contraignent SUBVIEW à suivre son redimensionnement de la vue supervisée (comme attaché à pour superviser les bords). Pour ce faire, ajoutez SUBVIEW comme sous-vue à ce CONTAINERVIEW et ajoutez comme contraintes quelque chose comme ça:
V: | - [SUBVIEW] - |
H: | - [SOUS-VUE] - |
Ces contraintes doivent être ajoutées à SUBVIEW superview, donc CONTAINERVIEW.
Si vous supprimez SUBVIEW en vérifiant simplement toutes les contraintes CONTAINERVIEW, vous pouvez voir que deux ne sont plus là.
la source
Cette question peut également être prouvée par le constructeur d'interface. Lorsque vous faites glisser et déposez un
UIView
sur lesViewController
contraintes d'ajout puis supprimez leUIView
, vous pouvez voir les contraintes bleues disparaître.la source