【发布时间】: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 时调用。对我来说很奇怪。