1

该应用程序在 iOS5 中横向运行非常好。但是在 iOS6 中,它开始在所有视图控制器中使用纵向。不再调用 shouldAutorotateToInterfaceOrientation 方法。我阅读了有关 iOS6 中更改的旋转机制的新内容,我可以通过在我的 AppDelegate 中添加一行来解决这个问题:

self.window.rootViewController = _viewController

_viewControler 是起始屏幕(主菜单)。所有其他视图控制器都实现了 shouldAutorotateToInterfaceOrientation 方法,并且仅对横向返回 YES。因此,对于只需要支持一个方向的应用程序来说,这是一个完美的解决方案。

然而,问题是我需要一个视图控制器(我们称之为phone-VC)以纵向显示。现在,如果我想要旋转这个视图控制器,那么我需要在分配给 appDelegate 中的 rootViewControler 的主菜单控制器中返回 YES。但是,我不能这样做,因为这个 rootViewController 是只需要以横向呈现的启动窗口,否则这个窗口中带有图形的布局将会中断。但是,如果我没有从它的 shouldAutorotateToInterfaceOrientation (Home-menu) 返回 YES,那么在我的视图 phone-VC 中不会调用相同的方法,需要以纵向显示。

有任何想法吗?在 AppDelegate 中是否强制分配 rootViewController?

更新:设备上存在问题(至少在 iPhone4 上)。

4

1 回答 1

1

是的,从 iOS 6.0 开始,您必须将 rootviewcontroller 分配给 Windows.rootViewController。这个控制器将决定他们的孩子是否旋转。默认情况下支持所有方向,但您可以通过实现 shouldAutoRotate 和 supportedInterfaceOrientations 委托方法来限制它们。我有一个实例,在使用MGSplitViewController时我没有将 rootviewcontroller 分配给 Windows, MGSplitViewController将 viewcontroller 作为子视图添加到窗口。我只需要更改它以制作 rootviewcontroller 并且一切正常!

查看Apple 文档中的UIKit部分 - iOS 6.0 发行说明。

于 2012-10-10T10:21:54.633 回答