2

我的項目中有一個非常奇怪的錯誤。我有一個UIScrollView作爲我的主要觀點。在裏面,我有一個UIViewController(不是UITableViewController),它有一個UITableView實例變量,以及一些雜項UIButtons。我已經將視圖控制器的視圖框架設置爲CGRectMake(0, 64, 320, 388),因爲我在它上面有一個標籤欄(這不是功能)。起初,它的效果很好,看起來不錯,但是一旦我出示並解僱modalViewController(因此我重新加載了UIViewController),它會將UIViewController的視圖推到屏幕的頂部(默認情況下將其設置爲CGRectMake(0, 0, 320, 460),我已經設置wantsFullScreenLayoutNO,現在將其設置爲CGRectMake(0, 0, 320, 388)UIViewController在viewWillAppear和viewDidAppear之間調整自己的大小?

我在什麼地方跟蹤這個問題viewWillAppearviewDidAppear之間這是我確切的日誌駁回modalViewController之後:

2011- 05-06 11:08:39.974 Campus [1570:207] Frame是0.000000,64.000000,320.000000,388.000 000(viewWillAppear中)
2011-05-06 11:08:40.378校園[1570:207] Frame是0.000000,0.000000,320.000000,388.000000(viewDidAppear)

正如你可以看到,該幀是在細viewWillAppear,但不在viewDidAppear

我已經做了下面的事情,試圖解決這個問題:
- 設置所需的幀loadViewviewDidLoadviewWillAppearviewDidAppear
- 將我的wantsFullScreenLayout設置爲NO
- 殺死我的[super viewWillAppear:][super viewDidAppear:]調用我的方法覆蓋。

我該怎麼做?!?!?

+0

是誰提出的模態視圖控制器? – diatrevolo 2011-05-06 15:26:30

+0

多數民衆贊成調整自己 – aopsfan 2011-05-13 15:56:24

回答

0

我的問題在於,從iOS 4開始,Apple僅支持每個窗口1個視圖控制器。但是,從iOS 5開始,Apple增加了對容器視圖控制器的支持,並且已經添加了到UIViewController的方法,例如addChildViewController:。使用容器視圖控制器算法解決了我的問題。請訪問UIViewController Class Reference瞭解更多信息。

編輯:對於那些懶得在課堂上引用搜索「容器視圖控制器」,這裏是班上參考的相關章節的要點:

自定義UIViewController子類也可以充當一個容器視圖 控制器。容器視圖控制器管理其擁有的其他視圖控制器(也稱爲其子視圖控制器 )的內容 的顯示。孩子的視圖可以按原樣顯示,或者與容器視圖控制器擁有的視圖一起呈現給 。

您的容器視圖控制器子類應聲明一個公共的 接口來關聯其子級。這些方法的本質是給你增加 ,並取決於你正在創建的容器的語義。 您需要決定一次可以顯示您的視圖 控制器可以顯示多少個孩子,當顯示這些孩子時,以及他們的 顯示在您的視圖控制器的視圖層次結構中的位置。您的視圖控制器 類定義了哪些關係(如果有的話)由孩子共享。 通過建立你的容器乾淨的公共接口,你 確保兒童使用其功能邏輯,而無需訪問你的容器如何實現 行爲 太多私人資料。

你的容器視圖控制器必須將孩子的根視圖到視圖層次之前本身就是一個子視圖控制器 關聯。 這使得iOS的正確路線事件的子視圖控制器和 這些控制器管理的意見。同樣地,它從視圖層次結構中移除一個 孩子的根視圖後,就應該從自身斷開 子視圖控制器。要創建或打破這些關聯,您的容器將調用基類 定義的特定方法。這些方法不打算由您的容器類的客戶端調用 ;他們只能用於您的容器的實施 提供預期的遏制行爲。

+1

你怎麼能解決這個問題的UIViewController中,你能張貼一些例子嗎? – 2012-11-23 07:52:08

+0

請提供代碼示例及答案!鏈接到廣闊的UIViewController類引用不會幫助其他任何人。 – 2012-11-30 17:52:33

+0

@TRedman自從一年前我的代碼發生了很大的變化,我認爲我不可能給出一個有用的代碼示例。我在編輯中引用了部分類參考 – aopsfan 2012-12-02 03:11:38