2011-03-01 17 views
1

我有一個視圖已經在Interface Builder中創建,並且已配置爲根據方向調整大小。如果在應用程序處於縱向模式時創建視圖並將其添加到顯示器,則一切正常。然後,我可以旋轉設備/模擬器,並按照我的預期調整視圖大小。但是,如果在應用處於橫向模式時添加視圖,則無法正確調整大小。該視圖的創建和大小就好像該應用仍處於肖像模式一樣。該視圖添加了以下代碼:添加子視圖時,如果應用處於橫向模式,則視圖不會調整大小

self.viewController = [[MyViewController alloc] initWithNibName:nibName bundle:bundle]; 
[self addSubview:self.viewController.view]; 

這裏沒有神奇的事情發生。此外,視圖控制器還指定:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return YES; 
} 

此外,只要在縱向模式下添加視圖,它就會按預期工作。我嘗試了幾種不同的方法,包括在視圖中手動設置autoresizingMask屬性,調用setNeedsLayout,並調用layoutIfNeeded,但似乎沒有任何工作。我可以手動設置框架的寬度和高度來強制視圖的大小,但這會打破視圖的動態特性。例如,如果我手動設置寬度,高度不會調整,因爲內容不會重新佈局。

任何想法?

回答

0

雖然我猜你已經解決了這個問題,但我想簡單回答一下:) 原因是因爲當你創建並添加視圖時,它是用縱向框架從筆尖加載的。加載時,它不會自動旋轉,因爲那時應用程序無法知道您的意思是要旋轉它。

一些選項包括:

  1. 有從依賴於電流的方向,當你添加視圖適當的筆尖一個人像和風景筆尖和負載。

  2. 加載後按照以前的方法調整代碼。

也可能有一個選項強制重新佈局,這聽起來對我來說好像是你以後的樣子。

HTH

0

這將發生,你只是將一個視圖控制器的視圖添加到其他。這是一種不好的做法,可能會導致內部不一致例外。請參閱WWDC的Container Api視頻。對於這樣的東西,使用了遏制API。

但你仍然想這樣做。添加視圖後,你需要調用shouldAutorotateToInterfaceOrientation上self.viewController

+0

如果這行不通,設置self.viewController.view的還成立autotresizing自面罩框架.viewController.view,默認情況下它沒有調整它的子視圖的大小 – 2013-02-25 09:50:24

5

只需設置你的子視圖幀像這樣

self.viewController.view.frame = self.view.bounds; 
相關問題