UIDevice 在 iOS 16 中主要有 2 大变化。
- 获取设备信息时,无法获取设备前面用户的信息。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let name = UIDevice.current.name
// iOS16之前:XXX iPhone 13 Pro Max
// iOS16之后:iPhone 13 Pro Max,不再包含用户信息
print(name)
}
}
- 不再支持通过
setValue()
方法设置设备的方向,替换为 UIWindowScene 的requestGeometryUpdate()
方法。与之相关的一个问题是设备方向变化通知UIDevice.orientationDidChangeNotification
在 iOS 16 中无法触发。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
// 通过UIWindowScene的requestGeometryUpdate()设置
windowScene?.requestGeometryUpdate(.iOS(interfaceOrientations: .landscapeLeft))
}
// MARK: 设备方向变化通知在iOS16中无法触发,但下列方法仍然会触发
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
print(#function)
}
}