【问题标题】:iOS6: do we have to set rootViewController in App delegate in order to support different orientations?iOS6:我们是否必须在 App 委托中设置 rootViewController 才能支持不同的方向?
【发布时间】:2012-10-10 09:19:13
【问题描述】:

该应用程序在 iOS5 中以横向运行非常好。但是在 iOS6 中,它开始在所有视图控制器中使用纵向。不再调用 shouldAutorotateToInterfaceOrientation 方法。我阅读了new stuff about changed rotation mechanism in iOS6 并且能够通过在我的 AppDelegate 中添加一行来解决这个问题:

self.window.rootViewController = _viewController

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

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

有什么想法吗? AppDelegate中rootViewController的赋值是强制的吗?

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

【问题讨论】:

标签: iphone objective-c ios rotation


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多