0

我無法從橫向視圖彈出UINavigationController(子類)到縱向視圖。popViewControllerAnimated:從橫向到縱向

我有一個鏈從windowrootViewController使用shouldAutorotatesupportedInterfaceOrientations下降到目前我個人視圖控制器設置。

所以,我有一個視圖控制器,只支持肖像。下一個推動支持景觀。

當我推動支持風景的那個,然後旋轉設備時,一切都會旋轉。到現在爲止還挺好。

現在,當我彈回到第一個視圖時,兩個視圖都會在動畫之前旋轉。因此,第二個viewController的橫向視圖(由於旋轉變換而非常小)被推送到縱向屏幕的右側。

我想將橫向視圖推送到其右側(縱向視圖控制器的頂部或底部),而縱向視圖控制器顯示在背景中。

我該如何做到這一點?

我想我可能會嘗試使用動畫控制器,但UINavigationController的委託方法navigationController:animationControllerForOperation:在以不同方向彈出到視圖控制器時未被調用。

回答

0

經過幾天的實驗,我想出了我的問題是什麼。希望這將有助於未來的人。

我試圖過度設計鏈條。

我有一個自定義容器與兒童標籤欄控制器,其中包含多個導航控制器包含視圖控制器具有不同的方向要求。

我的主要失敗是假設即使模態窗口被提出,系統仍會首先詢問窗口的根視圖控制器。考慮到這種情況,我添加在容器中的支票,是這樣的:

- (UIInterfaceOrientationMask)supportedInterfaceOrientations { 
    if (self.presentedViewController) { // This check is wrong! Don't do this! 
     return [self.presentedViewController supportedInterfaceOrientations]; 
    } 

    // Pass request to child view controller 
} 

然而,這從根本上導致了我的問題在兩個方面。

首先,沒有這個檢查,UIKit會自動檢測模態視圖控制器,並直接詢問其supportedInterfaceOrientations

其次,UIKit處理動畫的方式涉及到我們通常不知道的幾個內部視圖控制器。通過檢查presentingViewController中的模式視圖控制器,該檢查正在捕獲它們並要求它們全部提供supportedInterfaceOrientations。 UIKit並不意味着要這樣做,所以我是干擾其運營的人。

此修復程序旨在實現supportedInterfaceOrientations,因此它只涉及視圖控制器的直接後代(即在當前視圖控制器的視圖層次結構中爲其後代的視圖控制器)。直系後裔可以進一步從那裏傳遞請求。

無論演示者如何,都將模式窗口視爲完全獨立的鏈。

換句話說,信任UIKit