2012-12-14 9 views
5

Ho alcuni problemi con l'uso di layout automatici con viste del contenitore (in entrambi i casi: con il modello di contenimento della vista utilizzato da ios5 e una semplice vista del contenitore).(layout automatico) la vista del contenitore viene ridimensionata ma le visualizzazioni secondarie non sono

Ho una sorta di controller Master Detail personalizzato, posso ridimensionare il contenitore di sinistra dopo che un'azione dell'utente e correlazione del controller giusto devono ridimensionarsi in base ai nuovi spazi non utilizzati.

Per il controller "dettagli", ho configurato il controller con uno Xib e utilizzando il layout automatico, ho una vista al suo interno. in formato visivo sarebbe qualcosa del genere:

  • V: | [headerView] [contentView] [footerView] |
  • H: | [headerVieW]
  • H: | [contentView]
  • H: | [footerView]

questa è solo una rappresentazione al undestand il problema.

Se provo a ridimensionare il dettaglio controller.view il frame si espande correttamente ma i subviews no.

nel metodo - (void) viewDidLayoutSubviews di quel controller ho provato a impostare i frame manualmente e questo funziona ma non è la cosa giusta, suppongo, dal momento che sto usando il layout automatico!

Questo problema ritorna di nuovo se ho una vista generica e una sottoview che contiene visualizzazioni di immagini, se definisco quella vista da xib utilizzando l'autolayout, se runtime cambi il fotogramma dopo che la vista è settata sottoview (imageviews per edample) non ridimensionare.

Chiunque può darmi una mano?

Grazie!

+0

Mai arrivare da nessuna parte con questo? Sembra che molte persone abbiano problemi simili, ma non si trovano soluzioni! – elsurudo

risposta

1

In base alla descrizione dei vincoli, penso che il comportamento descritto sia esattamente quello che gli hai detto di fare.

Si noti che i vincoli orizzontali richiedono che le viste siano a filo con il lato sinistro della supervisione. Tuttavia, non dicono nulla su come dovrebbero riguardare il lato destro della superview. Quindi, cambiare la larghezza della superview non fa nulla; restano a filo con le dimensioni a sinistra e mantengono la larghezza dei loro vincoli interni.

Se si desidera ridimensionare le viste con il loro superview, è necessario aggiungere vincoli sul lato finale. In particolare, i vostri vincoli potrebbero apparire così:

H:|[headerView]| 
H:|[contentView]| 
H:|[footerView]| 

O forse si vuole loro di ridursi solo se il superview è troppo stretta, ma per il resto non allungare tutto il senso attraverso esso. Poi si potrebbe fare questo:

H:|[headerView]-(>=10)-| 
H:|[contentView]-(>=10)-| 
H:|[footerView]-(>=10)-| 

ogni caso, sembra che la radice del problema è che i punti di vista non sono legate al bordo destro della superview in alcun modo, e questo non è legato alla sua larghezza in alcun modo. L'aggiunta di questi vincoli dovrebbe risolvere il problema.

0

Se le visualizzazioni nel formato visivo sono comprese tra "|" (è il tuo caso)

CGSize fittingSize = [container systemLayoutSizeFittingSize: UILayoutFittingCompressedSize]; 
container.frame = CGRectMake(0, 150, 320, fittingSize.height);