我有一個孩子UIViewController
與這是UITabBarController
和UINavigationBarController
層次結構的一部分。我們稱之爲ChildViewController
;然後我的層次結構是這樣的:僅支持層次結構中的子UIViewController的旋轉?
UITabBarController
|
UINavigationViewController [tab 1]
|
SomeParentViewController
|
SomeOtherParentViewController
|
ChildViewController
現在我只想ChildViewController
支持旋轉爲橫向。 (這是一個顯示聊天視圖的視圖控制器,對於某些人來說,橫向模式更容易打字。)我添加了方法- (BOOL) shouldAutorotateToInterfaceOrientation:
到ChildViewController
來聲明它支持橫向,但旋轉設備沒有效果。從調試中,我發現– willAnimateRotationToInterfaceOrientation:duration:
沒有被調用。
經過在線搜索,我發現UITabBarController
的後代只支持給定的方向,如果UITabBarController
本身支持該方向。而奇怪的是,UITabBarController
只支持一個方向,如果每個標籤的視圖控制器支持旋轉。與上面的選項卡1類似,其他三個選項卡的視圖控制器爲UINavigationViewController
實例;而且,因爲我們必須更深入,所以每個UINavigationViewController
只支持其子視圖控制器支持方向的方向。
所以在這一點上,添加- (BOOL) shouldAutorotateToInterfaceOrientation:
添加到SomeParentViewController
和其他UINavigationController
實例的子項允許ChildViewController
旋轉。但現在SomeParentViewController
和其他三個標籤將旋轉到風景,並且它看起來很可怕。我只希望ChildViewController
支持景觀。
作爲鎖溝工作,我創建了自己的UITabBarController
子類,名爲RotatingUITabBarController
,並向ChildViewController
類添加了一個全局標誌,讓我知道它是否已創建並顯示。該RotatingUITabBarController
只覆蓋- (BOOL) shouldAutorotateToInterfaceOrientation:
,併爲實現:
if ([ChildViewController isDisplayed]) {
return ((toInterfaceOrientation == UIInterfaceOrientationPortrait) ||
(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||
(toInterfaceOrientation == UIInterfaceOrientationLandscapeRight));
}
return NO;
現在,如果我啓動應用程序,切換到SomeParentViewController
或任何其他選項卡,然後旋轉手機不能切換到風景模式,肖像中而不是保持。到現在爲止還挺好。如果我創建並顯示ChildViewController
並旋轉手機,它將進入風景。到現在爲止還挺好。但現在如果我彈出ChildViewController
來揭示SomeOtherParentViewController
,它也是在風景。 SomeParentViewController
以及我切換到的每個其他選項卡也是如此。
我現在沒有技巧了。任何意見將不勝感激,謝謝!