Xcode 11新建工程.--iOS 13 SceneDelegate適配

 

收錄文章::::::::::::::: iOS 13 適配要點總結php

 

在Xcode 11 建立的工程,運行設備選擇 iOS 13.0 如下的設備,運行應用時會出現黑屏現象。
緣由:windows

Xcode 11 默認是會建立經過 UIScene 管理多個 UIWindow 的應用,工程中除了 AppDelegate 外會多一個 SceneDelegate
AppDelegate和SceneDelegate這是iPadOS帶來的新的多窗口支持的結果,而且有效地將應用程序委託的工做分紅兩部分。
也就是說在咱們用多窗口開發iPadOS中,從iOS 13開始,您的應用表明應該:spa

設置應用程序期間所需的任何數據。
響應任何專一於應用的事件,例如與您共享的文件。
註冊外部服務,例如推送通知。
配置您的初始場景。
相比之下,在iOS 13中的新頂級對象是一個UIWindowScene,場景表明能夠處理應用程序用戶界面的一個實例。所以,若是用戶建立了兩個顯示您的應用程序的窗口,則您有兩個場景,均由同一個應用程序委託支持。
這些場景旨在彼此獨立工做。所以,您的應用程序再也不移動到後臺,而是單個場景執行 - 用戶能夠將一個移動到後臺,同時保持另外一個打開。版本控制

咱們能夠看下info.plist文件和工程項目文件的變化如圖:code

 

 

 

 

 

  1. Appdelegate新增windows屬性

適配方案一

若是咱們不開發iPadOS多窗口APP,SceneDelegate窗口管理咱們能夠不須要直接刪掉就行了。對象

  1. 刪除掉info.plist中Application Scene Manifest選項,同時,文件SceneDelegate可刪除可不刪
  2. 相關代碼註釋掉
  3. Appdelegate新增windows屬性

適配方案二

即要用iOS 13中新的SceneDelegate,又能夠在iOS 13一下的設備中完美運行。那就添加版本判斷.blog

  1. SceneDelegate中添加@available(iOS 13, *)
    1. AppDelegate中一樣聲明window屬性
      1. AppDelegate中兩個關於Scene的類也添加版本控制,oc/Swift中能夠用擴展單獨拎出來
      2. 切記:這種方式,AppDelegate中的有關程序的一下狀態的方法,iOS 13設備是不會走的,iOS13一下的是會收到事件回調的。13以上的設備會走SceneDelegate對應的方法
相關文章
相關標籤/搜索