iOS16适配指南之UIDevice

3,016 阅读1分钟

UIDevice 在 iOS 16 中主要有 2 大变化。

  1. 获取设备信息时,无法获取设备前面用户的信息。
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)
    }
}
  1. 不再支持通过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)
    }
}