Compagni, ho problemi con AutoLayout in Interface Builder (Xcode 5 / iOS 7). È molto semplice e importante, quindi penso che tutti dovrebbero sapere come funziona correttamente. Se questo è un bug in Xcode, è critico!
Quindi, ogni volta che ho una gerarchia di viste come questa, ho dei problemi:
>UIViewController
>> UIView
>>>UIScrollView
>>>>UILabel (or any other comparable UIKit Element)
UIScrollView ha vincoli solidi, ad esempio 50 px da ogni lato (nessun problema). Quindi aggiungo un vincolo Top Space a UILabel (nessun problema) (e posso persino fissare l'altezza / larghezza dell'etichetta, non cambia nulla, ma dovrei essere inutile a causa delle dimensioni intrinseche dell'etichetta)
Il problema inizia quando aggiungo un vincolo finale a UILabel:
Ad esempio, Trailing Space to: Superview Equals: 25
Ora vengono visualizzati due avvisi e non capisco perché:
A) Ambiguità della dimensione del contenuto scorrevole (Vista scorrimento ha altezza / larghezza del contenuto scorrevole ambiguo)
B) Viste fuori posto (etichetta prevista: x = -67 effettiva: x = 207
Ho fatto questo esempio minimo in un nuovo progetto che puoi scaricare e ho allegato uno screenshot. Come puoi vedere, Interface Builder si aspetta che l'etichetta si trovi al di fuori del confine di UIScrollView (il rettangolo tratteggiato arancione). L'aggiornamento del frame dell'etichetta con lo strumento Risolvi problemi lo sposta proprio lì.
Nota: se si sostituisce UIScrollView con un UIView, il comportamento è come previsto (il frame dell'etichetta è corretto e in base al vincolo). Quindi sembra che ci sia un problema con UIScrollView o mi sto perdendo qualcosa di importante.
Quando eseguo l'app senza aggiornare il frame dell'etichetta come suggerito da IB, si posiziona perfettamente, esattamente dove dovrebbe essere e UIScrollView è scorrevole. Se aggiorno il riquadro, l'etichetta non è visibile e UIScrollView non scorre.
Aiutami Obi-Wan Kenobi! Perché il layout ambiguo? Perché la visione fuori posto?
Puoi scaricare il progetto di esempio qui e provare se riesci a capire cosa sta succedendo: https://github.com/Wirsing84/AutoLayoutProblem
UIScrollView
direttamente. Invece usa UICollectionView
o UITableView
il più possibile, quasi tutto è possibile con questi elementi e dà anche semplicità, leggibilità e riusabilità !!!