Iphone 是否仅支持层次结构中的子UIViewController上的旋转?

Iphone 是否仅支持层次结构中的子UIViewController上的旋转?,iphone,orientation,landscape,screen-orientation,uiinterfaceorientation,Iphone,Orientation,Landscape,Screen Orientation,Uiinterfaceorientation,我有一个子UIViewController,它是一个层次结构的一部分,有一个uitabarcontroller和一个UINavigationBarController。让我们称之为ChildViewController;然后,我的层次结构如下所示: UITabBarController | UINavigationViewController [tab 1] | SomeParentViewController | SomeOtherParentV

我有一个子
UIViewController
,它是一个层次结构的一部分,有一个
uitabarcontroller
和一个
UINavigationBarController
。让我们称之为
ChildViewController
;然后,我的层次结构如下所示:

UITabBarController
  |
  UINavigationViewController [tab 1]
    |
    SomeParentViewController
      |
      SomeOtherParentViewController
        |
        ChildViewController
现在我只希望
ChildViewController
支持横向旋转。(这是一个显示聊天视图的视图控制器,对于某些人来说,横向模式更容易键入。)我将方法
-(BOOL)shouldAutorotateToInterfaceOrientation:
添加到
ChildViewController
以声明它支持横向,但旋转设备没有效果。通过调试,我发现没有调用
–WillAnimateRotationInterfaceOrientation:duration:

在网上搜索之后,我发现
UITabBarController
的后代只支持给定的方向,如果
UITabBarController
本身支持该方向。而且,奇怪的是,
UITabBarController
仅在每个选项卡的视图控制器支持旋转时才支持方向。与上面的选项卡1一样,其他三个选项卡的视图控制器是
UINavigationViewController
实例;而且,因为我们必须更深入,每个
UINavigationViewController
仅在其子视图控制器支持方向时才支持方向

因此在这一点上,添加添加
-(BOOL)应该自动旋转指向面方向:
SomeParentViewController
,而另一个
UINavigationController
实例的子对象允许
ChildViewController
旋转。但是现在
SomeParentViewController
和其他三个选项卡将旋转到横向,看起来很可怕。我只想
ChildViewController
支持横向

作为一项工作,我创建了自己的
UITabBarController
子类,名为
RotatingUITabBarController
,并向
ChildViewController
类添加一个全局标志,让我知道它是否已创建并显示。
RotatingUITabBarController
仅覆盖
-(BOOL)应自动旋转指针面方向:
,并按以下方式实现:

if ([ChildViewController isDisplayed]) {
  return ((toInterfaceOrientation == UIInterfaceOrientationPortrait) ||
      (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) ||
      (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight));
}
return NO;
现在,如果我启动应用程序,切换到
SomeParentViewController
或任何其他选项卡,旋转手机不会切换到横向模式,而是保持纵向模式。到现在为止,一直都还不错。如果我创建并显示
ChildViewController
并旋转手机,手机将进入横向。到现在为止,一直都还不错。但是现在,如果我弹出
ChildViewController
来显示
SomeOtherParentViewController
,它也在横向视图中。
SomeParentViewController
和我切换到的每个其他选项卡也是如此


我现在没有戏法了。任何建议都将不胜感激,谢谢

YouTube应用程序可能是你想要的最佳行为模式。大多数界面都是纵向的,但播放视频的视图可以是纵向的,也可以是横向的

如果你看看这个应用程序,你会注意到UI的整个选项卡部分实际上是一个模态视图控制器。当您启动应用程序时,选项卡栏控制器会立即以模式显示。唯一一次离开模式选项卡栏控制器是在播放视频时——您会注意到整个选项卡界面向下滑动以显示视频视图。当视频结束时,选项卡栏控制器再次以模式显示

这是一种与“正常”方法相反的方法,在“正常”方法中,您只会短暂地使用模态视图控制器,但它在YouTube应用程序中运行得非常好。它可能对你也有好处,也可能对你没有好处。重要的是让你的应用程序具有可预测性和流动性,并让用户感觉随时处于控制之中