Chers développeurs, j'ai des problèmes avec AutoLayout dans Interface Builder (Xcode 5 / iOS 7). C'est très basique et important, donc je pense que tout le monde devrait savoir comment cela fonctionne correctement. S'il s'agit d'un bogue dans Xcode, il est critique!
Donc, chaque fois que j'ai une hiérarchie de vues comme celle-ci, je rencontre des problèmes:
>UIViewController
>> UIView
>>>UIScrollView
>>>>UILabel (or any other comparable UIKit Element)
Le UIScrollView a des contraintes solides, par exemple, 50 px de chaque côté (pas de problème). Ensuite, j'ajoute une contrainte Top Space à l'UILabel (pas de problème) (et je peux même épingler la hauteur / largeur de l'étiquette, ne change rien, mais ne devrait pas être nécessaire en raison de la taille intrinsèque de l'étiquette)
Le problème commence lorsque j'ajoute une contrainte de fin à l'UILabel:
Par exemple, Trailing Space to: Superview Equals: 25
Maintenant, deux avertissements se produisent - et je ne comprends pas pourquoi:
A) Ambiguïté de la taille du contenu défilable (la vue de défilement présente une hauteur / largeur de contenu défilant ambigu)
B) Vues mal placées (étiquette attendue: x = -67 réelle: x = 207
J'ai fait cet exemple minimal dans un nouveau projet que vous pouvez télécharger et j'ai joint une capture d'écran. Comme vous pouvez le voir, Interface Builder s'attend à ce que l'étiquette se trouve en dehors de la limite de UIScrollView (le rectangle en pointillés orange). La mise à jour du cadre du libellé avec l'outil Résoudre les problèmes le déplace là.
Remarque: si vous remplacez UIScrollView par UIView, le comportement est conforme aux attentes (le cadre de l'étiquette est correct et conforme à la contrainte). Il semble donc qu'il y ait un problème avec UIScrollView ou que je manque quelque chose d'important.
Lorsque j'exécute l'application sans mettre à jour le cadre du Label comme suggéré par IB, il est très bien positionné, exactement là où il est censé être et UIScrollView peut défiler. Si je mets à jour le cadre, l'étiquette est hors de vue et l'UIScrollView ne défile pas.
Aidez-moi Obi-Wan Kenobi! Pourquoi cette disposition ambiguë? Pourquoi cette vue déplacée?
Vous pouvez télécharger l'exemple de projet ici et essayer de comprendre ce qui se passe: https://github.com/Wirsing84/AutoLayoutProblem
UIScrollView
directement. Au lieu d'utiliser UICollectionView
ou UITableView
autant que possible, la plupart du temps, tout est possible avec ces éléments et cela donne également la simplicité, la lisibilité et la réutilisation !!!