2011-10-18 18 views
5

我有幾個UIViewControllers,通過UINavigationController加載,其中我重載loadView,並設置自定義視圖來顯示。我在設置一些子視圖的框架時可能會遇到問題,也可能是視圖本身。我認爲無論是UINavigationController還是UIViewController都能夠強制它的視圖在顯示時填充屏幕。UIViewController或UINavigationController設置它的視圖大小嗎?

我想知道是否和/或什麼時候設置了視圖的大小。如果它正在發生,它是設置視圖的框架還是以另一種方式進行。

謝謝。

更新: 通過這方面的工作,而我剛纔注意到的是,我做一個新的UINavigationController,這個的loadView方法:

- (void)loadView 
{ 
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10.0f, 10.0f, 10.0f, 10.0f)]; 
    [view setBackgroundColor:[UIColor redColor]]; 
    self.view = view; 
    [view release]; 
} 

我得到一個紅色的觀點佔據了整個屏幕,除了狀態酒吧和標題。我的視圖何時被調整大小以填滿屏幕?我應該在創建視圖時使用多大的尺寸?

回答

3

UIViewControllers的幀空間變小,因爲UINavigationController通過添加尺寸爲44.0f的UINavigationBar來操縱視圖。

它被調整大小,因爲你用self.view = view;代替視圖如果你會使用addSubview:,它會保持它的原始大小。 logancautrell解釋何時和爲什麼。

+0

謝謝,澄清。當我加載視圖控制器loadView中的視圖,當通過UINavigationController推送時,我是否需要將框架設置爲CGRectMake(0.0,0.0,320.0,416.0)?因爲我不需要在UINavigationBar或狀態欄的框架原點y座標中進行補償? – Ryan

+0

NavBar的底部將成爲視圖控制器的新X,Y原點,您只需要補償調整後的高度。可以肯定的尺寸使用 'NSLog(@「wxh =%fx%f」,self.view.frame.size.width,self.view.frame.size.height);' – Wolfert

+0

謝謝,澄清它爲了我。我仍然想知道什麼時候視圖改變了。因爲即使我在loadView中設置了不正確的尺寸,它也會變成正確的尺寸。我會接受你的回答,因爲它讓我走了。再次感謝。 – Ryan

9

UINavigationController將在推送時自動調整ViewController的視圖大小。從該文檔:

pushViewController:動畫:

在的viewController參數中的對象成爲導航堆棧上的頂視圖控制器。推視圖控制器會顯示它所管理的視圖。該視圖的顯示方式由動畫參數確定。如果動畫參數爲YES,則將視圖動畫到位;否則,視圖就會顯示在適當的位置。在顯示之前,視圖會自動調整大小以適應導航欄和工具欄(如果存在)。

如果你想要顯示一個較小的視圖,那麼你將不得不創建一個容器,並使其成爲你的VC視圖的孩子,手動設置大小。根據創建視圖的方式,可能必須正確設置自動調整大小掩碼。

+0

謝謝,這一定是我讀過一次的文檔,但是我完全忘記了讀到它的地方。 – Ryan

+2

有沒有什麼辦法強制導航控制器在push操作後重新調整其子視圖控制器的大小?我正在更改導航控制器的高度,但由於某些原因,它不會自動調整其內容。 – devios1

+0

我還看到導航控制器在轉換過程中旋轉設備時未調整其子視圖控制器大小的問題。 – AdamPro13

相關問題