La scena principale mostra un bambino UIViewController
, inserendo un Contenitore figlio nella sua vista e incorporando un figlio UIViewController in tale contenitore secondario. Lo faccio ctrl-trascinando dal contenitore figlio al bambino UIViewController
nello storyboard
e scegliendo il passaggio "incorpora".Layout automatico di un contenitore secondario che incorpora un UIViewController
Questo mi consente di incapsulare e riutilizzare il bambino UIViewController
altrove. Penso che sia abbastanza standard. Ma non riesco a ottenere correttamente il layout automatico.
Ho fatto un semplice banco di prova per dimostrare questo: https://github.com/murraycu/ios-example-autolayout-of-child-container-views
Ha due UIViewControllers
che sono incorporati in un controllore Tab in modo da poter passare da uno all'altro.
La scheda "Simple" mostra la SimpleViewController
, che mostra un'immagine e un'etichetta, visto qui nella storyboard:
Né l'UIImage o UILabel ha specificato un vincolo altezza, pur avere un vincolo di uguale larghezza (uguale alla vista principale) per mantenere le larghezze semplici.
UILabel non è chiaramente molto elevato ma UIImage e UILabel hanno priorità di Hugging del contenuto leggermente diverse, rendendo le loro altezze non ambigue in base al layout automatico. Quindi grazie al layout automatico, quando imposto il suo testo in fase di esecuzione su un testo che richiede più spazio, occupa più spazio, prendendo spazio lontano dalla UII immagine sopra di esso. Questo è un bene - è il comportamento che io voglio, come si è visto nell'emulatore:
Ora per il problema: la scheda "con figlio Container" mostra la WithChildContainerViewController, che mostra la stessa immagine, ma mostra il mio ChildViewController (incorporato in un contenitore secondario) anziché UILabel. E quel ChildViewController incorporato mostra UILabel. Qui è in storyboard:
Tuttavia, il sistema di layout automatico ora non sembra sapere quanto spazio del contenitore figlio ha bisogno di mostrare tutto il testo nell'etichetta nel mio ChildViewController. Come nella scheda "Semplice", né UIImage né il Contenitore figlio hanno specificato un vincolo di altezza. Ora XCode lamenta che "L'altezza è ambiguo per 'vista contenitore' E sembra che questo nel simulatore:.
che è migliorata se aggiungo un vincolo al contenitore figlio, limitando il suo fondo verso il basso della vista padre, come suggerito da @iphonic: https://github.com/murraycu/ios-example-autolayout-of-child-container-views/commit/1d295fe0a6c4502764f8725d3b99adf8dab6b9ae ma l'altezza è ancora sbagliata:?
come posso lasciare che il sistema di layout automatico so cosa fare ho pensato di attuare intrinsicContentSize di UIView, ma UIViewController non è un UIView.
è necessario aggiungere vincoli su 'View' di ChildViewController rispetto del contenitore su cui si sta visualizzando bambino. – iphonic
Grazie. Suona bene, ma non riesco a trascinare Ctrl dalla vista principale del controller di Child View al containerView (il contenitore secondario) nell'altra scena (principale). Potresti essere più specifico, per favore? – murrayc
@murrayc hai mai risolto questo problema? Sto vivendo lo stesso – Lneuner