【问题标题】:shouldautorotate method not calledshouldautorotate 方法未调用
【发布时间】:2023-04-07 06:44:01
【问题描述】:

应用定向突然停止按预期工作。我有一个带有tabBarController 的应用程序,主要以纵向模式工作。一些 VC 会覆盖它以允许景观。部署目标是iOS 9.0+ 上的 iPhone。

shouldautorotate 方法不再在应用程序的任何地方被调用,但 supportedInterfaceOrientations 被调用大约 10 次(在 tabbarController 中)每次旋转(我猜是针对不同的 subVC)。

这一切以前都很好用,但是如果我检查一个旧的分支,我知道它 100% 有效,它仍然无法正常工作。 (我知道这一点是因为我有一个测试版本,当我下载它时它可以正常工作)

我尝试过回溯、清理、更新、重新安装、重新下载整个项目、切换分支等,但没有任何效果。我已经检查了调试器输出中的所有警告,并尝试了一堆代码解决方案。

我想知道这是否可能是某种plist 或项目设置导致的。但是,老实说,我几乎从不更改项目设置,所以我怀疑是不是这样。

PS。这不是类似标题的问题的重复。我已经通过它们了。如果有人有任何想法,我将不胜感激。

【问题讨论】:

    标签: ios objective-c xcode


    【解决方案1】:

    自动旋转是我 iOS 存在的祸根。在 iOS 6 之前有一种非常好的方法,然后在 iOS 6 中有一种新的方法,然后在 iOS 7 中有另一种方法,在 iOS 8 中还有另一种方法。根据UIViewController documentation:

    从 iOS 8 开始,所有与旋转相关的方法都已弃用。相反,旋转被视为视图控制器视图大小的变化,因此使用viewWillTransitionToSize:withTransitionCoordinator: 方法报告。当界面方向改变时,UIKit 在窗口的根视图控制器上调用这个方法。然后,该视图控制器通知其子视图控制器,在整个视图控制器层次结构中传播消息。

    请注意,此方法是在窗口的根视图控制器上调用的,而不是在活动/可见/任何视图控制器上调用的。我的根视图控制器关闭任何弹出框,然后在其视图上调用setNeedsLayout。 (我手动布局所有视图,因此您的要求可能会有所不同。)

    【讨论】:

    • 但是 shouldAutoRotate 在文档中没有被标记为已弃用。为什么会突然停止工作?我想我可以用supportedInterfaceOrientations 想出一个解决方案,我只需要测试并修复我的应用程序中的所有700 万个VC。
    • 什么?文档与 iOS 的行为不符??我感到震惊! :-) 事实上,UIViewController 中所有与旋转相关的方法在 iOS 8 中都已弃用。
    猜你喜欢
    • 2014-05-20
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多