我最近遇到了一個問題,即將一些代碼從iPhone應用程序移植到iPad。這可能與here中描述的問題有關,但我發現該問題的解釋/解決方案不令人滿意。該方案是這樣的:在iPad上顯示多個視圖控制器和旋轉
視圖控制器「A」(根視圖控制器)提出了一個模式視圖控制器(稱之爲「B」)與「形表」模式的演講風格。
視圖控制器B以「全屏」模式呈現樣式呈現視圖控制器'C'。
iPad旋轉,而視圖控制器C是最頂級的視圖控制器。
解散C後,B重新顯示,但方向不正確。
至於我可以告訴大家,不應該有多個呈現視圖控制器的鏈接的問題 - 事實上,這種行爲Presenting View Controllers from Other View Controllers文檔中明確支持。我還閱讀了iOS 5 Release Notes中的以下語句:
iOS 5中的旋轉回調不適用於全屏顯示的視圖控制器。這意味着如果您的代碼在另一個視圖控制器上顯示視圖控制器,然後用戶隨後將設備旋轉到不同的方向,則在解散時,底層控制器(即呈現控制器)將不會收到任何旋轉回調。但請注意,呈現控制器將在重新顯示時收到viewWillLayoutSubviews調用,並且可以從此方法查詢interfaceOrientation屬性並用於正確佈置控制器。
據我所知,這不會發生 - 視圖控制器B接聽電話時-shouldAutoRotateToInterfaceOrientation但值這一呼籲interfaceOrientation參數是視圖控制器B的接口的價值取向,當它呈現視圖控制器C,而不是解僱時C的界面方向的值。由於我們在iPad上,所有這些視圖控制器在-shouldAutoRotateToInterfaceOrientation中返回YES。因此B的視圖邊界永遠不會改變,所以-willLayoutSubviews永遠不會被調用。
我已經嘗試在B回調之前將視圖控制器C的方向保存在B中,然後在下次調用時使用該信息-shouldAutoRotateToInterfaceOrientation並僅在C被取消時返回YES。修復了這個失敗的UI,但未進行此檢查,但視圖控制器B未將其界面方向更新爲此值,因此後續模態演示將從設備的錯誤側進/出。
有沒有人能夠成功獲得這樣的視圖控制器配置工作?這似乎不是那種不尋常的情景,所以我有點驚訝,它不像我最初預期的那樣工作。
在此先感謝。
我同意使用導航控制器作爲模式的根本不那麼容易混淆。然而,我試圖匹配的設計需要視圖控制器B的表單樣式和視圖控制器C的全屏演示。這似乎是實現期望結果的阻力最小的路徑,但不幸的是似乎有一些非顯而易見的問題。我實際上不確定在iPhone上是否存在這個相同的問題 - 您認爲手機上的旋轉被禁用是正確的。 – jamie