2013-05-21 46 views
3

[這是張貼在Apple Developer Forums但一直沒有得到答覆,所以我會盡力在這裏。]UISplitViewController無法識別設備旋轉

我的應用程序使用UISplitViewController爲iPad主/詳細視圖和在iOS 6上運行。分離視圖控制器是其窗口的根視圖控制器。詳細視圖主要由嵌入在UINavigationController中的UIWebView組成。詳細視圖中唯一的其他元素是導航控制器提供的工具欄和導航欄。當網絡視圖顯示帶有嵌入式YouTube視頻的頁面時,用戶可以將視頻全屏顯示。這全部由UIWebView完成---我不負責創建全屏視頻播放器。如果它的事項,一旦視頻播放器被放置在一個全屏幕視圖,所述的UIApplication的keyWindow共享實例不是視頻播放過程中的主應用程序窗口,而是替代MPFullScreenTransitionViewController的一個實例。

如果用戶這全屏播放期間旋轉的裝置,然後結束播放,UISplitViewController不正確放置它的孩子。方法

splitViewController:willHideViewController:withBarButtonItem:forPopoverController: 

splitViewController:willShowViewController:invalidatingBarButtonItem: 
委託的

(在這種情況下,細節視圖控制器)永遠不會被調用。

如果在播放全屏視頻時將設備旋轉到橫向,則關閉電影播放器​​會導致顯示詳細視圖控制器,該視圖控制器會保留其以前的欄按鈕項,以便在彈出窗口中繪製主視圖控制器雖然點擊按鈕不會產生任何動作)。在應繪製主視圖控制器的情況下,只存在黑色區域。在細節視圖控制器中向右滑動將滑出覆蓋黑色區域的主視圖控制器,但這仍然作爲彈出窗口而不是持久視圖存在。

如果在播放全屏視頻時將設備旋轉到縱向,則關閉電影播放器​​會導致顯示詳細視圖控制器,該控制器缺少用於在彈出窗口中繪製主視圖控制器的欄按鈕項目。的詳細視圖控制器具有正確的寬度,並且主視圖控制器是不可見的,所以詳細視圖的外觀幾乎是如預期除了缺少欄按鈕項。

在兩種情況下,不正確的視圖後,手動旋轉設備將出現適當的還原應用程序的功能。但是,依靠用戶旋轉(或雙旋轉)設備來解決繪圖問題顯然是不可接受的。

有一些方法,以保證當所有的孩子都消失模態電影播放器​​背後的拆分視圖控制器意識到裝置旋轉的?

回答

2

答案建議用戶SamuraiZack在蘋果開發者論壇。在委託UISplitViewController,迫使拆分視圖控制器的重新佈局在viewWillAppear中:

[self.splitViewController.view setNeedsLayout]; 
[self.splitViewController.view layoutIfNeeded]; 

原始響應可以在Apple Developer forums觀看。