2011-04-13 58 views
1

我有以下設置。UIViewController框架

帶有UIScrollView的pagingScrollViewController,因爲它的視圖(self.view = scrollView)。 在該scrollView中,我將一個rootViewController的視圖添加爲子視圖。 rootViewController的視圖是一個UIView,我在其上添加一個或另一個視圖(取決於內部邏輯)。

UIScrollView被初始化爲一個等於applicationFrame的框架,所以0,20,320,460。由於狀態欄位於頂部,所以這很好。

將rootViewController的視圖添加到滾動視圖時出現問題。在rootViewController的創建過程中,它的視圖是在-loadView中設置的,在我的情況下它仍然被註釋掉。所以標準的appel loadView被處理。

它給了我一個也有0幀的視圖,,320,460.這不是我想看到的,因爲現在rootViewController的視圖是從頂部刪除了40個像素實際的iPhone屏幕。

現在,這當然很容易通過在-loadView中手動設置rootViewControllers視圖或爲其指定一個幀,其中y在-viewDidLoad中設置爲0;

但我無法想象這就是蘋果公司打算完成此任務的方式。我沒有使用接口生成器,所以也許這就是問題所在,蘋果打算使用IB,但是我固執地研究這個主題:)

我是否以錯誤的方式使用viewControllers?這似乎是將scrollView的邏輯從另一個視圖的邏輯中分離出來的好方法。

將第二個UIViewController的視圖添加到第一個UIViewController的視圖的正確方法是什麼?其中第一個viewController.view接收一個0,20,320,460的幀。而第二個controller.view一個幀0,0,320,460(所以基本上是第一個controller.view的邊界)

這裏有很多使用單詞控制器和視圖,希望問題很明顯。

+0

如何初始化rootViewController的視圖框架? – Ravin 2011-04-13 11:39:45

+0

我不是,那是工作中的魔法*。如果您不覆蓋-loadView,系統會爲您創建一個視圖。不幸的是,一幀0,20,320,460。 – DIJ 2011-04-13 12:01:45

+0

那就是答案本身。你的rootViewController有系統提供的0,20,320,460幀。所以當你將它添加到你認爲正常的視圖中時,它會相對較低,y = 20。 – Ravin 2011-04-13 12:06:15

回答

1

回答我的問題...

獵食是正確的。 在閱讀loadView方法和apple's view controller programming guide之後,我得出結論:這是系統的默認行爲。如果你想要其他的東西,重寫-loadView並自己動手。其實蘋果聲明,如果你不使用NIB,你應該重寫-loadView來創建至少一個基本的簡單視圖。