gpt4 book ai didi

ios - 当设备以横向启动时,UIDevice 方向返回纵向

转载 作者:搜寻专家 更新时间:2023-11-01 06:56:25 27 4
gpt4 key购买 nike

这是一个示例代码,如果设备在首次启动时是“纵向”或“横向”,以及当它检测到方向变化时,将打印该代码。

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()
}
}

如果我用手机肖像启动应用程序,它运行良好。但是,如果我在手机处于横向状态时启动该应用程序,它首先会检测到纵向。但是,如果您之后旋转设备,它将是正确的。这是错误还是我错误地使用了 UIDevice.current.orientation

最佳答案

看,你的代码是完美的,但调用不正确。 viewDidLoad 方法不保证界面方向或任何与 UI 相关的属性,它只是说 view 已加载,但如果您想保证获得正确的详细信息,则您应该在 DispatchQueue.main.async(execute: block) (主队列)下调用它,这将提供正确的 orientation 或者另一种方法是在 viewDidLayoutSubviews 下调用 但这有一个缺点,即根据您的 View 和 subview 调整大小调用多次。

DispatchQueue.main.async {
self.getOrientation()
}

引用:view.frame.width IS correct in viewDidLoad with storyboard, why?

Apple 文档:https://developer.apple.com/documentation/uikit/uiviewcontroller

关于ios - 当设备以横向启动时,UIDevice 方向返回纵向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53149854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com