2012-06-08 71 views
3

看來我似乎可能會誤解一些東西。我有一個全屏的iPad應用程序,沒有狀態欄或其他任何東西。它也始終處於橫向模式,所以我不需要擔心肖像。我使用正確的框架以編程方式創建視圖,但是當視圖實際加載並顯示時,框架似乎不同。查看加載後框架變化

這裏是我用來生成視圖代碼(我添加更多的東西下面的觀點,但他們沒有與我的問題):

- (void)loadView{ 
    self.view = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 1024.0, 768.0)]; 

    backgroundImage = [[UIImageView alloc] initWithFrame:self.view.bounds]; 
    [backgroundImage setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; 
    [self.view addSubview:backgroundImage]; 
} 

鑑於沒有出現,我的NSLog的self.view框架並獲得{{-128, -128}, {1024, 768}}。大小是正確的,但原點已經改變。爲了看看會發生什麼,我嘗試初始化視圖的起點爲128,128,這產生了一幀{{0, -256}, {1024, 768}},我也無法解釋。

誰能告訴我發生了什麼?我嘗試着設置自動調整大小的口罩等,並沒有真正改變任何東西。我有點卡住了。

回答

2

所有的UIViews'正確的幾何圖形只在viewWillAppear:方法中和之後可用。在此之前,視圖層次結構的幾何圖形尚未設置且值不準確。如果你需要知道,改變,計算框架,你不應該在viewWillAppear:方法之前做它。
更新:
重寫-loadView方法初始化self.viewUIView。如果您使用的是筆尖文件,則會自動完成,您不應該重寫此方法。實際視圖幾何圖形在此方法中不可用。
-viewDidLoad是設置視圖層次的地方。這是您通常初始化您的子視圖並將其添加到您的self.view中的地方。只要不需要多線程,您可以執行一些較重的操作。視圖幾何圖形在此方法中也不可用 - 自動調整蒙版在此處仍然不起作用,因此無法依靠frame屬性。
-viewWillAppear:是所有設置都正確的地方,視圖已調整大小 - 如果要計算並設置其他幾何體,請使用此方法,frame屬性是正確的。這裏只執行輕量級的操作,因爲這個方法不應該阻塞主線程,它應該儘可能快地執行。
viewDidAppear:相同。

+0

只是沒有任何意義 - 如何從一個筆尖加載的視圖可以在加載時正確設置其幾何圖形,但是當代碼中創建視圖時(它可以在與筆尖同時設置的同時進行設置被加載)我們不能設置任何的框架,直到稍後在加載過程中? –

+0

一般的做法是在'loadView'中只初始化'self.view',你仍然可以用一個硬編碼框架來初始化它,但是在'viewWillAppear:'方法之前,自動調整屏蔽不會有任何效果,並且你不能指望他們在'viewDidLoad'中,因爲在這種方法中,視圖層次結構是從nib文件或手動設置的。我會更新我對這些方法的回答,以及應該做什麼和在哪裏。 – graver