iOS 13 新增的创建 Key Window 的方式

Jan 30, 2023 • 预计阅读时间 1 分钟

iOS 13 开始,SceneDelegate 取代了原来 AppDelegate 里的大部分代理方法,如果 App 最低系统要求是 iOS 13,那么就不会走原来 AppDelegate 里的代理方法了。

对应地,原来在 didFinishLaunchingWithOptions 里创建 Key Window 的逻辑也需要移到 SceneDelegate 中:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
        guard let windowScene = (scene as? UIWindowScene) else { return }

        window = UIWindow(windowScene: windowScene)
        window?.frame = windowScene.coordinateSpace.bounds
        window?.rootViewController = UINavigationController(rootViewController: ViewController())
        window?.makeKeyAndVisible()
    }
}

主要有两点区别:

  1. 使用 windowScene.coordinateSpace.bounds 替代 UIScreen.main.bounds 作为 Window 的 frame
  2. Window 必须关联一个 windowScene,否则无法显示。
iOS
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

使用命令行把 p12 证书导入系统钥匙链

[教程]使用证书助理创建自签名证书