【问题标题】:iOS App Does Not Detect Device Orientation ChangeiOS 应用程序未检测到设备方向更改
【发布时间】:2017-09-15 22:37:56
【问题描述】:

我的应用程序中的方向更改存在问题。我的应用程序支持 Portrait、LandscapeLeft 和 LandscapeRight 设备方向,我 100% 确信我在 Info.plist 中正确配置了它。当我在我的 iPhone/模拟器上运行我的应用程序并旋转设备时,我的应用程序 ViewControllers 都没有响应旋转。也就是说,无论我多么努力和疯狂地旋转手机,都无法将 ViewController 更改为横向模式。我试图覆盖“自动旋转”变量以返回真/假,结果相同,我的应用坚持单人像模式,这不是我想要的。所以我在想也许我的应用程序甚至无法检测到设备方向变化;因此,我将以下代码放在我的 AppDelegate 中,我是对的,我在旋转手机时从不调用 func "deviceOrientationDidChange",但在应用程序进入后台时会调用它。有人有任何线索吗?我已经为此苦苦挣扎了好几天,并试图从互联网上找到解决方案,但没有希望。请帮忙。

UIDevice.current.beginGeneratingDeviceOrientationNotifications()
let notifiCenter = NotificationCenter.default
notifiCenter.addObserver(self, selector: #selector(self.deviceOrientationDidChange(_:)), name: .UIDeviceOrientationDidChange, object: nil)

func deviceOrientationDidChange(_ notification: Notification) {
    print("device orientation did change...")
}

【问题讨论】:

  • 您的“根”视图控制器是 NavController 吗?一个标签栏控制器?单视图控制器?您是否在 AppDelegate 中做其他事情,例如设置状态栏属性?你在使用故事板吗?如果是这样,如果您(临时)添加一个新的 Storyboard 和一个新的、简单的 UIViewController,那个会正确旋转吗?
  • 我的应用提供身份验证。当用户被认证时,rootViewController 是 TabBarController。否则,rootViewController 就是 UIPageViewController。是的,我使用 Storyboard,并且我的大部分 VC 都连接到 Main Storyboard。我的 AppDelegate 中有这一行:“application.statusBarOrientation = .portrait”强制应用以纵向模式启动。我试图删除该行,viewControllers 的行为仍然相同。
  • hmmm... 让我想知道您的代码中是否还有另一个(或几个)application.statusBarOrientation = .portrait 实例。如果您从 AppDelegate 中删除该行,并在 iPad 上以横向方式启动您的应用程序,它仍然以纵向方式启动吗?
  • 我用关键字“statusBarOrientation”进行了搜索,这是唯一有它的地方。我实际上尝试了以编程方式更改设备方向,并且成功了。 ViewControllers 确实旋转到横向模式。
  • 对我来说,问题似乎是我的应用程序忽略了设备方向更改或者只是没有收到通知。我把这个问题的代码放在我的应用程序中。当我旋转手机时,观察者函数从未被调用,这很奇怪。但它在应用程序 didEnterBackground 或 willEnterForeground 时调用。对我来说很奇怪。

标签: ios uideviceorientation


【解决方案1】:

我不知道你想达到什么目的,但通常使用:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) // Do more stuff }

应该足以在旋转发生变化时捕获回调,因为视图大小也会发生变化。

【讨论】:

  • 感谢您的回复。我试过这个。我现在遇到的问题是,没有 ViewControllers 甚至可以检测到方向变化,也永远不会调用 viewWillTransition。
  • 尝试在您的视图控制器中使用该功能并设置断点以检查旋转更改时是否有效。
  • 是的。我试过了。如果您从这个问题中查看我的代码。这个问题似乎甚至没有通知 ViewControllers 设备方向已更改。澄清一下,方向更改适用于我手机上运行的其他应用程序,而我的 iPhone 上的人像方向锁定已关闭。
【解决方案2】:

我仍然无法弄清楚真正的原因是什么,但是在我更新我的应用程序中使用的所有 pod 框架后,这个问题确实得到了解决。我真的很努力地试图找出导致这个问题的原因。不幸的是,我做不到。我通过 pod 安装了大约 20 个第三方框架。我对这个问题的修复是 Pod Update。不知道原因是什么。希望这个答案对将来的人有所帮助。

【讨论】:

    猜你喜欢
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多