Xcode 11/iOS 13 变化
2019-11-07 本文已影响0人
JQWONG
前言
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
<key>UIUserInterfaceStyle</key>
<string>Light</string>
WWDC2019:Optimizing App Launch
Architecting Your App for Multiple Windows
Apple’s New UIScene API: A Programmatic Approach