2012-12-19 10 views
5

Eventuali duplicati:
UIViewController returns invalid frame?diversi layout visualizzazione secondaria in viewDidLoad e viewWillAppear

Durante il debug ho notato che in viewDidLoad chiamare il mio vista della montatura è origin=(x=0, y=20) size=(width=320, height=460) che non è preciso. Nella chiamata viewWillAppear è configurata correttamente: origin=(x=0, y=0) size=(width=320, height=416) prendendo in considerazione l'altezza della barra di navigazione. Il layout delle mie sottoview dipende dalla vista radice, ma non voglio impostarle ogni volta che verrà visualizzata la vista.

Come dovremmo gestire queste due chiamate?

+0

Occupati di loro esattamente come sei stato. Guarda l'installazione in -viewWillAppear, perché è quella che tiene conto dell'altezza della barra di navigazione, quindi esegui l'inizializzazione in -viewDidLoad. – CodaFi

risposta

6

Il punto corretto per gestire il layout della vista è nel metodo UIViewController viewWillLayoutSubviews. Questo viene chiamato ogni volta che la vista del controller della vista è dimensionata come quando viene mostrata per la prima volta e quando viene ruotata.

Come si è visto, la vista del controller della vista non è stata ancora completamente dimensionata quando viene chiamato viewDidLoad.

Se è necessario supportare iOS 4.3, non è possibile utilizzare viewWillLayoutSubviews poiché è stato aggiunto in 5.0. In questo caso, eseguire il layout in viewWillAppear:.

+0

Si noti che -viewWillAppear può essere chiamato prima che la cornice delle viste sia impostata e che la finestra abbia finito di orientarsi. Se hai bisogno di questo in iOS 4 devi aspettare che venga visualizzata la vista -viewDidAppear. –

Problemi correlati