UIDevice orientation returns 当设备以横向启动时纵向
UIDevice orientation returns portrait when device launches as landscape
这是一个示例代码,如果设备在首次启动时为 "portrait" 或 "landscape" 以及检测到方向更改时将打印该代码。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
getOrientation()
}
func getOrientation() {
let orientation = UIDevice.current.orientation
if orientation == .landscapeLeft || orientation == .landscapeRight {
print("landscape")
}
else {
print("portrait")
}
}
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
getOrientation()
}
}
如果我启动带有 phone 肖像的应用程序,它运行良好。但是,如果我在横向模式下使用 phone 启动应用程序,它首先会检测到纵向。但是,如果您之后旋转设备,它将是正确的。这是错误还是我使用 UIDevice.current.orientation
不正确?
此 属性 的值始终为 returns 0,这是未知的,除非已通过调用 beginGeneratingDeviceOrientationNotifications()
.
启用方向通知
viewWillTransition
方法仅在您旋转设备时触发。您应该尝试在 viewDidAppear
中调用您的 getOrientation
看,你的代码很完美,就是调用不对。 viewDidLoad
方法不保证界面方向或任何 UI 相关属性的东西它只是说 view
已加载但是如果你想保证获得正确的细节那么你应该在 DispatchQueue.main.async(execute: block)
(主队列)下调用它,这将给出适当的 orientation
或者另一种方式是在 viewDidLayoutSubviews
下调用,但这有一个缺点,即根据您的视图和子视图调用多次调整大小。
DispatchQueue.main.async {
self.getOrientation()
}
参考:
Apple 文档:https://developer.apple.com/documentation/uikit/uiviewcontroller
更新您的测试代码
func getOrientation() {
let orientation = UIDevice.current.orientation
if orientation == .landscapeLeft || orientation == .landscapeRight {
print("landscape")
}
else if orientation == .unknown{
print("unknown")
}else if orientation == .portrait || orientation == .portraitUpsideDown{
print("portrait")
}
}
这是一个示例代码,如果设备在首次启动时为 "portrait" 或 "landscape" 以及检测到方向更改时将打印该代码。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
getOrientation()
}
func getOrientation() {
let orientation = UIDevice.current.orientation
if orientation == .landscapeLeft || orientation == .landscapeRight {
print("landscape")
}
else {
print("portrait")
}
}
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
getOrientation()
}
}
如果我启动带有 phone 肖像的应用程序,它运行良好。但是,如果我在横向模式下使用 phone 启动应用程序,它首先会检测到纵向。但是,如果您之后旋转设备,它将是正确的。这是错误还是我使用 UIDevice.current.orientation
不正确?
此 属性 的值始终为 returns 0,这是未知的,除非已通过调用 beginGeneratingDeviceOrientationNotifications()
.
viewWillTransition
方法仅在您旋转设备时触发。您应该尝试在 viewDidAppear
getOrientation
看,你的代码很完美,就是调用不对。 viewDidLoad
方法不保证界面方向或任何 UI 相关属性的东西它只是说 view
已加载但是如果你想保证获得正确的细节那么你应该在 DispatchQueue.main.async(execute: block)
(主队列)下调用它,这将给出适当的 orientation
或者另一种方式是在 viewDidLayoutSubviews
下调用,但这有一个缺点,即根据您的视图和子视图调用多次调整大小。
DispatchQueue.main.async {
self.getOrientation()
}
参考:
Apple 文档:https://developer.apple.com/documentation/uikit/uiviewcontroller
更新您的测试代码
func getOrientation() {
let orientation = UIDevice.current.orientation
if orientation == .landscapeLeft || orientation == .landscapeRight {
print("landscape")
}
else if orientation == .unknown{
print("unknown")
}else if orientation == .portrait || orientation == .portraitUpsideDown{
print("portrait")
}
}