【发布时间】:2011-12-19 14:05:08
【问题描述】:
据我所知,有 3 种方法可以获取当前界面方向:
self.interfaceOrientation[[UIApplication sharedApplication] statusBarOrientation][[UIDevice currentDevice] orientation]
它们之间有什么区别?
【问题讨论】:
标签: ios orientation
据我所知,有 3 种方法可以获取当前界面方向:
self.interfaceOrientation[[UIApplication sharedApplication] statusBarOrientation][[UIDevice currentDevice] orientation]它们之间有什么区别?
【问题讨论】:
标签: ios orientation
[[UIApplication sharedApplication] statusBarOrientation] - 它始终等于以下四个值之一:纵向、横向左侧、横向右侧和纵向倒置。
[[UIDevice currentDevice] orientation] - 这一个等于标准的四个值,还有:未知、面朝上或面朝下。
[[UIApplication sharedApplication] statusBarOrientation] - 是获取界面方向的首选方式。
【讨论】:
[[UIDevice currentDevice] orientation] "... 始终返回 0,除非已通过调用 beginGeneratingDeviceOrientationNotifications 启用方向通知。" (文档)
[[UIApplication sharedApplication] statusBarOrientation] 是一种更可靠、更简单的检测和管理方向变化的方法。
self.interfaceOrientation 返回 UIInterfaceOrientation,界面的当前方向。它是 UIViewController 中的一个属性,你只能在 UIViewController 类中访问它。
[[UIApplication sharedApplication] statusBarOrientation] 返回 UIInterfaceOrientation,应用程序状态栏的当前方向。您可以在应用程序的任何位置访问该属性。我的经验表明,它是检索真实界面方向的更有效方法。
[[UIDevice currentDevice] orientation] 返回UIDeviceOrientation,设备方向。您可以在应用程序的任何位置访问该属性。但请注意,UIDeviceOrientation 并不总是 UIInterfaceOrientation。例如,当您的设备放在普通桌子上时,您可能会收到意外的值。
【讨论】:
self.interfaceOrientation 在 iOS 8 中已弃用。
[[UIDevice currentDevice] orientation] 值的影响。例如,您的应用仅支持纵向模式。在这种情况下,您会从左右(而不是从顶部和底部)获得通知中心面板和控制中心面板。在这种情况下,当您的设备真正处于横向时,您将在 [[UIDevice currentDevice] orientation] 中获得纵向值。
所有视图控制器都有这个功能
override func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation) {
//fromInterfaceOrientation.isLandscape
}
或者您可以使用状态栏方向
if UIApplication.sharedApplication().statusBarOrientation == UIInterfaceOrientation.Portrait {
//
}
适用于 iOS 9 :)
【讨论】:
自 iOS 13 起
可以使用窗口场景的interfaceOrientation属性
UIWindow.windowScene.interfaceOrientation
let interfaceOrientation = UIApplication.shared.windows.first?.windowScene?.interfaceOrientation ?? UIInterfaceOrientation.unknown
【讨论】: