Xcode 11/iOS 13 变化

前言

Xcode 11新项目会发现,除了AppDelegate之外还多了一个SceneDelegate,这是因为在iPadOS中支持多窗口的结果,AppDelegate中不再拥有window属性,window属性被移到SceneDelegate了

了解AppDelegate职责
  • iOS13以前:AppDelegate负责处理App生命周期和UI生命周期


  • iOS13以后:AppDelegate只负责处理App的生命周期
    UI以及Scene Session的什么周期由SceneDelegate负责


所以如果要设置跟控制器,不应该在AppDelegate中设置了,应该转由SceneDelegate设置

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        let vc = ViewController()
        let nav = UINavigationController(rootViewController: vc)
        // Create the window. Be sure to use this initializer and not the frame one.
         //需要注意的是,初始化window时,要用windowScene:这个方法拿到windowScene来初始化,否则初始化后的界面是黑的
        window = UIWindow(windowScene: windowScene)
        window?.rootViewController = nav
        window?.makeKeyAndVisible()
    }
  • 注意
    千万别忘记在plist里面把对应的Storyboard Name删除,不然App启动的时候会报错说找不到Main(如果你把自带的Storyboard删除了)


DarkMode

总所周知,iOS其中比较大的一个变动就是支持DarkMode,如果在design上面没有因为DarkMode而更新,我们可以让app无论是在DarkMode还是LightMode(光亮)下都以LightMode的形式显示
只需要在info.plist文件中添加UserInterfaceStyle配置, 并设置为Light

UIUserInterfaceStyle
Light


WWDC2019:Optimizing App Launch
Architecting Your App for Multiple Windows
Apple’s New UIScene API: A Programmatic Approach

你可能感兴趣的:(Xcode 11/iOS 13 变化)