iOS:通用应用程序不会旋转,从不调用 willRotateToInterfaceOrientation

Posted

技术标签:

【中文标题】iOS:通用应用程序不会旋转,从不调用 willRotateToInterfaceOrientation【英文标题】:iOS: Universal app won't rotate, never calls willRotateToInterfaceOrientation 【发布时间】:2011-02-06 20:40:45 【问题描述】:

我的(通用 iPhone/iPad)应用程序不会旋转。在我所有的视图控制器中,我向方法 shouldRotate 返回“YES”,但我的视图控制器的 willRotateToInterfaceOrientation 方法永远不会被调用。

这是一个常见问题吗?

【问题讨论】:

您可能应该仔细检查一下您没有打开方向锁定。你知道,在我们都疯狂尝试测试之前:P 它在 iPad 模拟器和实际 iPad 上的行为是这样的。 Aurum:在偶然发现您的评论之前,我已经浪费了 10 分钟试图弄清楚到底发生了什么!啊!! 【参考方案1】:

在那个通用应用程序中,您使用的是 splitViewController 吗?如果是这样,请确保您的所有 viewControllers 都返回 Yes 以进行 autoRotate。

我将一组 viewControllers(实际上是 NavigationViewControllers)传递给 splitViewController,但我的视图没有旋转。这是因为我的左手 viewController 没有实现 shouldAutorotate。我认为这是因为当您使用 splitViewController 时 iPad 上的旋转与 iPhone 上的旋转不同。旋转时显示两个视图控制器。我猜两者都必须支持横向模式?

如果您不希望一个 viewController 旋转,请在 shouldAutoRotate 方法中进行条件检查以查看您是否在 iPad 上。

【讨论】:

【参考方案2】:

您使用的是标签栏吗?您将需要对您的标签栏控制器进行子类化并返回 yes 以表示应该旋转。

【讨论】:

你确定吗?我从来不需要那样做。我只是在所有标签栏的视图控制器中为 shouldRotate 返回 YES,而不是为标签栏本身返回 YES。 我正在使用基于 [link]pushplay.net/2009/05/… 的自定义视图控制器,但适用于 NIB 和通用应用程序。 我会为这个投一票;它对我有用。我不想在我的 iPhone 上旋转标签栏,但在 iPad 上,我愿意——而且我必须继承 UITabBarController 的子类以获得自动旋转支持。我是否对UISplitViewController 进行了子类化并不重要(我尝试了有无)。【参考方案3】:

我刚碰到这个。解决方案是继承 UISplitViewController 并添加

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    return YES;

即使各个视图控制器已经返回 YES,但在我添加拆分视图控制器子类之前它还是不起作用。

【讨论】:

以上是关于iOS:通用应用程序不会旋转,从不调用 willRotateToInterfaceOrientation的主要内容,如果未能解决你的问题,请参考以下文章

应用程序仅在 iOS 6 中旋转,在 iOS 5 中不旋转

未调用 iOS8 接口旋转方法

为啥 logoutController 从不调用? [复制]

ios从不同类调用方法的不同方式[关闭]

在 iOS 11 中,UIViewController 的 transitionFromViewController 从不调用它的完成块

iOS:以编程方式将通知设置从“从不请求”更改为“拒绝”