2012-01-30 94 views
4

我做所有事情編程時爲ios開發,所以我手動初始化loadView中的視圖控制器視圖爲我所有的視圖控制器(這是蘋果說要做的)。這樣做會讓我感到挫折的是,最初的viewcontrollers框架{{0,20},{320,460}}不正確地解釋了我的應用中的任何navbars或tabbars。這個觀點終於在viewDidAppear中設定了適當的框架,但是到那時,任何事情都爲時已晚。無論如何,無需手動計算它就可以更早地識別視圖佈局?沮喪與視圖初始化loadView

這很令人沮喪,因爲我總是需要手動檢查手機是否處於橫向模式或縱向模式才能解釋旋轉,並且如果必須以特定方式設置我的子視圖,而我無法使用自動調整,那麼我也必須做手動計算。

蘋果推薦這樣做的任何模式嗎?或者無論如何要讓它識別視圖佈局而不必手動計算它?

+1

只是好奇,爲什麼你以編程方式做一切? – 5StringRyan 2012-01-30 23:47:29

+0

我只是喜歡,而且我爲我的應用程序製作的很多視圖在運行時都是動態的,所以我需要。 – 2012-01-30 23:59:45

+0

你應該使用'[[UIScreen mainScreen]邊界]'獲取當前視圖的大小 – wattson12 2012-01-30 23:58:54

回答

4

如果您使用的是iOS 5,則應該在您的UIViewController子類的viewDidLayoutSubviewsviewWillLayoutSubviews方法中傳遞正確的幀。這是您應該計算佈局的位置,並且在設備旋轉時調用它們。

否則,viewWillAppear存在於iOS 2.0中,我的測試應用程序顯示它傳遞了正確的幀。它並沒有解決旋轉中期,但大概你可以在其他地方掛鉤。你不打算在遊戲後期設置你的觀點,但除了玩layoutIfNeededviewDidLoad(我沒有設法在過去工作),我不知道你應該做什麼在iOS5之前。

+2

注意:這些方法只存在於iOS 5中。 – 2012-01-31 00:00:29

+0

對不起,我忘了提及,試圖不使用ios 5庫希望我的應用程序是向後兼容的。 – 2012-01-31 00:01:37

+0

'viewWillAppear'怎麼樣?這存在於iOS 2.0中,我的測試應用程序顯示它已通過適當的框架。它並沒有解決旋轉中期,但大概你可以在其他地方掛鉤。 – misnomer 2012-01-31 00:24:41

0

您可以確保您的視圖具有自動調整面膜的權利,它都應該調整一次,新的大小進來。

[view setAutoresizingMask:UIViewAutoresizingFlexibleHeight]; 

這就是我通常做。否則,我在稍後的回調中調整佈局 - 通過viewWillAppear調整導航欄的位置,不確定viewDidLoad是否爲時過早。