2012-05-03 247 views
2

我試圖顯示一個viewController xib視圖,其視圖顯示在一個固定的標題橫幅(0,0,320,44)下,這是一個在應用程序窗口上添加的imageView。更改UIViewController self.view框架

這是因爲我需要它在導航多個視圖控制器時粘在屏幕上。它是我正在做的項目的一個要求。

到目前爲止我曾嘗試:

  • 調整大小的XIB視圖到合適的幀大小(0,0,320,416),都與點符號和setter。

  • 使用self.view.frame = CGRectMake(0,44,320,416)更改viewDidLoad中的框架;

但它不起作用。任何建議?

+1

爲什麼要在應用程序窗口中添加imageview,您可以將其添加到viewController xib中。 –

+0

@Mudit:我需要它在導航多個視圖控制器時粘在屏幕上。它是我正在做的項目的一個要求。 –

+0

是否有任何理由使用多個視圖控制器?對我來說,你只需要多個視圖。在任何情況下,您都可以保留默認的全屏視圖控制器視圖並在標題橫幅下添加子視圖。在只有1個視圖控制器的情況下,在多個情況下工作量較少。 –

回答

15

設置框架viewWillAppear

- (void)viewWillAppear:(BOOL)animated 
{ 
    self.view.frame = CGRectMake(0, 44, 320, 416); 
    [super viewWillAppear:animated]; 
} 
+3

是的,這個工程!謝謝,但是爲什麼?框架尚未繪製在viewDidLoad中?只是想更好地理解,並且也不希望每次出現視圖時都要畫這些。 –

+0

我相信在viewWidAppear調用之前,self.view.frame在viewDidLoad(從iOS端)結束時被覆蓋。 –

+0

奇怪!它不工作viewWillAppear要麼;( –

0

只想補充多一點。更改UIViewController視圖的原因在viewDidLoad中不起作用是因爲調用[window makeKeyAndVisible],通常在您的viewDidLoad之後調用[window makeKeyAndVisible]。此調用會將window.rootViewController的框架更改爲等於窗口的框架。你可以通過改變UIViewController的view.frame來測試它,並在更改後繼續。

viewWillAppearviewDidAppear[window makeKeyAndVisible]之內被調用,但在視圖的框架被調整大小之後。

需要注意的是,只有最上面的控制器是rootViewController纔會自動更改其視圖的框架。這不影響連接到rootViewController的任何childViewControllers