2012-05-30 108 views
2

我不熟悉iOS UIViewController的詳細實現。我有以下代碼來創建一個新的UIViewController並顯示它,但是我在initWithFrame方法期間設置的框架不起作用,控制器的視圖始終是全屏(320 * 480)。iOS在顯示之前如何設置UIViewController的視圖框架?

UIViewController *viewController = [[UIViewController alloc] init]; 

// view 
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 140, 130)]; 
viewController.view = view; 
[view release]; 
AppController *app = (AppController*)[[UIApplication sharedApplication] delegate]; 

UINavigationController *nav = [app navController]; 
[nav pushViewController:viewController animated:YES]; 
[viewController release]; 

我在蘋果開發者文檔中搜索相關的想法,但是我沒有發現任何有用的東西。 UIViewController在展示之前如何處理其視圖框架屬性?我在哪裏可以找到有用的文檔。

謝謝。


更新:事實上,代碼是從的cocos2d-iphone DirectorTest:https://github.com/cocos2d/cocos2d-iphone/blob/release-2.0-rc1/tests/DirectorTest.m#L143

+1

你確定你沒有看到導航控制器視圖波紋管?你有沒有嘗試爲背景設置自定義顏色?您的導航也是錯誤的。如果此代碼位於視圖控制器中,請使用'self.navigationController'來訪問導航控制器並將新視圖控制器放在其上。 – Eimantas

+0

@Eimantas我更新了,這段代碼是從cocos2d測試過來的,它運行正常,視圖全屏顯示,甚至它的幀被設置爲(0,0,160,240) – qichunren

+0

這段代碼只是一個寫得不好的測試用例不應該用於真正的應用程序。但是,請注意視圖框架可以根據自動調整掩碼進行更改。 – Felix

回答

5

你有這一切都錯了 - 你真的需要閱讀(和理解)蘋果UIViewController文檔:

View Controller Catalog

View Controller Programming Guide

View Controller Reference

如果您在視圖控制器的代碼中創建視圖,則應該在視圖控制器的loadView方法中執行此操作。

從蘋果公司的文件

直接:

創建視圖編程

如果您希望以編程方式創建視圖... 您通過覆蓋您的視圖控制器的loadView 方法這樣做。您執行此方法應該執行以下操作:

創建根視圖對象。根視圖包含與視圖控制器關聯的所有其他視圖 。您通常將此視圖的框架定義爲 以匹配應用程序窗口的大小,應用程序窗口本身應該填充屏幕 。但是,根據顯示控制器的視圖來調整框架。請參閱「視圖控制器視圖大小調整」。

您可以使用通用UIView對象,定義的自定義視圖或可以縮放以填充屏幕的任何其他視圖。

創建其他子視圖並將它們添加到根視圖。對於每個 視圖,您應該執行以下操作:

創建並初始化視圖。對於系統視圖,您通常使用 initWithFrame:方法指定初始大小和位置 的視圖。使用addSubview:方法將視圖添加到父視圖。 將根視圖分配給視圖控制器的視圖屬性。

+0

謝謝。但是,你能解釋一下代碼嗎:https://github.com/cocos2d/cocos2d-iphone/blob/release-2.0-rc1/tests/DirectorTest.m#L143 它不使用loadView方法,而是將一個視圖分配給一個控制器爲什麼它工作? – qichunren

+2

他們不知道他們在做什麼? –

相關問題