2012-12-19 16 views
5

Powiel możliwe:
UIViewController returns invalid frame?Różne układy podrzędny w viewDidLoad i viewWillAppear

Podczas debugowania Zauważyłam, że w viewDidLoad nazwać moim zdaniem jest origin=(x=0, y=20) size=(width=320, height=460) ramki, które nie są dokładne. W wywołaniu viewWillAppear jest poprawnie skonfigurowany: origin=(x=0, y=0) size=(width=320, height=416), biorąc pod uwagę wysokość paska nawigacyjnego. Mój układ subviews zależy od widoku głównego, ale nie chcę ich konfigurować za każdym razem, gdy pojawi się widok.

Jak radzić sobie z tymi dwoma połączeniami?

+0

Rozpraw się z nimi dokładnie tak, jak ty. Wykonaj przegląd instalacji w -viewWillAppear, ponieważ to jest ta, która uwzględnia wysokość paska nawigacji, a następnie wykonaj inicjalizację w -viewDidLoad. – CodaFi

Odpowiedz

6

Właściwym miejscem do opracowania układu widoku jest metoda UIViewController viewWillLayoutSubviews. Jest to wywoływane za każdym razem, gdy widok kontrolera widoku ma takie rozmiary, jak po pierwszym wyświetleniu i po obróceniu.

Jak widać, widok kontrolera widoku nie został jeszcze w pełni zwymiarowany po wywołaniu viewDidLoad.

Jeśli potrzebujesz obsługi systemu iOS 4.3, nie możesz użyć numeru viewWillLayoutSubviews, ponieważ został on dodany w wersji 5.0. W takim przypadku wykonaj układ w viewWillAppear:.

+0

Należy zauważyć, że -viewWillAppear MOŻE zostać wywołany przed ustawieniem ramki widoków i zakończeniem samego okna. Jeśli potrzebujesz tego w iOS 4, musisz poczekać na wywołanie -viewDidAppear. –

Powiązane problemy