iOS 13 SceneDelegate適配

Xcode 11新建工程

在Xcode 11 創(chuàng)建的工程匹摇,運(yùn)行設(shè)備選擇 iOS 13.0 以下的設(shè)備贿衍,運(yùn)行應(yīng)用時(shí)會出現(xiàn)黑屏現(xiàn)象汰翠。

原因:

? ? Xcode 11 默認(rèn)是會創(chuàng)建通過 UIScene 管理多個(gè) UIWindow 的應(yīng)用,工程中除了 AppDelegate 外會多一個(gè) SceneDelegate

? ? AppDelegate和SceneDelegate這是iPadOS帶來的新的多窗口支持的結(jié)果焙格,并且有效地將應(yīng)用程序委托的工作分成兩部分卧土。

也就是說在我們用多窗口開發(fā)iPadOS中惫皱,從iOS 13開始,您的應(yīng)用代表應(yīng)該:

? ? 設(shè)置應(yīng)用程序期間所需的任何數(shù)據(jù)尤莺。

? ? 響應(yīng)任何專注于應(yīng)用的事件旅敷,例如與您共享的文件。

? ? 注冊外部服務(wù)颤霎,例如推送通知媳谁。

? ? 配置您的初始場景。

相比之下友酱,在iOS 13中的新頂級對象是一個(gè)UIWindowScene晴音,場景代表可以處理應(yīng)用程序用戶界面的一個(gè)實(shí)例。因此缔杉,如果用戶創(chuàng)建了兩個(gè)顯示您的應(yīng)用程序的窗口锤躁,則您有兩個(gè)場景,均由同一個(gè)應(yīng)用程序委托支持或详。

這些場景旨在彼此獨(dú)立工作进苍。因此,您的應(yīng)用程序不再移動到后臺鸭叙,而是單個(gè)場景執(zhí)行 - 用戶可以將一個(gè)移動到后臺,同時(shí)保持另一個(gè)打開拣宏。

我們可以看下info.plist文件和工程項(xiàng)目文件的變化如圖:

在這里插入圖片描述

在這里插入圖片描述

適配方案一

如果我們不開發(fā)iPadOS多窗口APP沈贝,SceneDelegate窗口管理我們可以不需要直接刪掉就好了。

? ? 刪除掉info.plist中Application Scene Manifest選項(xiàng)勋乾,同時(shí)宋下,文件SceneDelegate可刪除可不刪

? ? 相關(guān)代碼注釋掉

func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {

? ? ? ? return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)

? ? }

? ? func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {

? ? }

? ? //注釋掉這兩個(gè)方法嗡善。

? ? 1

? ? 2

? ? 3

? ? 4

? ? 5

? ? 6

? ? 7

? ? 8

? ? Appdelegate新增windows屬性

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

//如果是用默認(rèn)的storyboard,下面的代碼可以不寫

//? ? ? ? window = UIWindow.init()

//? ? ? ? window?.frame = UIScreen.main.bounds

//? ? ? ? window?.makeKeyAndVisible()

//? ? ? ? window?.rootViewController = UIStoryboard.init(name: "Main", bundle: nil).instantiateInitialViewController()

? ? ? ? return true

? ? }

? ? ///做完這些就跟以前一樣啦学歧。

? ? 1

? ? 2

? ? 3

? ? 4

? ? 5

? ? 6

? ? 7

? ? 8

? ? 9

? ? 10

? ? 11

適配方案二

即要用iOS 13中新的SceneDelegate罩引,又可以在iOS 13一下的設(shè)備中完美運(yùn)行。那就添加版本判斷枝笨,利用@available

步驟:

? ? SceneDelegate中添加@available(iOS 13, *)

@available(iOS 13, *)

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

//在類的頭部@available(iOS 13, *)添加即可

........

........

.......

}

? ? 1

? ? 2

? ? 3

? ? 4

? ? 5

? ? 6

? ? 7

? ? AppDelegate中同樣聲明window屬性

var window: UIWindow?

///didFinishLaunchingWithOptions中添加版本判斷

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

if #available(iOS 13, *) {

? ? ? }else {

? ? ? ? ? ? window = UIWindow.init()

? ? ? ? ? ? window?.frame = UIScreen.main.bounds

? ? ? ? ? ? window?.makeKeyAndVisible()

? ? ? ? ? ? window?.rootViewController = UIStoryboard.init(name: "Main", bundle: nil).instantiateInitialViewController()

? ? ? ? }

? ? ? ? return true

? ? }

? ? 1

? ? 2

? ? 3

? ? 4

? ? 5

? ? 6

? ? 7

? ? 8

? ? 9

? ? 10

? ? 11

? ? 12

? ? AppDelegate中兩個(gè)關(guān)于Scene的類也添加版本控制袁铐,Swift中可以用擴(kuò)展單獨(dú)拎出來,如下:

@available(iOS 13.0, *)

extension AppDelegate {

? ? // MARK: UISceneSession Lifecycle

? ? func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {

? ? ? ? return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)

? ? }

? ? func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {

? ? }

}

///完工

? ? 1

? ? 2

? ? 3

? ? 4

? ? 5

? ? 6

? ? 7

? ? 8

? ? 9

? ? 10

? ? 11

? ? 12

切記:這種方式横浑,AppDelegate中的有關(guān)程序的一下狀態(tài)的方法剔桨,iOS 13設(shè)備是不會走的,iOS13一下的是會收到事件回調(diào)的徙融。13以上的設(shè)備會走SceneDelegate對應(yīng)的方法

func applicationWillResignActive(_ application: UIApplication) {

? }

? .....

? .....

? .....

———————————————

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洒缀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子欺冀,更是在濱河造成了極大的恐慌树绩,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隐轩,死亡現(xiàn)場離奇詭異饺饭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)龙助,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進(jìn)店門砰奕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人提鸟,你說我怎么就攤上這事军援。” “怎么了称勋?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵胸哥,是天一觀的道長。 經(jīng)常有香客問我赡鲜,道長空厌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任银酬,我火速辦了婚禮嘲更,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘揩瞪。我一直安慰自己赋朦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宠哄,像睡著了一般壹将。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上毛嫉,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天诽俯,我揣著相機(jī)與錄音,去河邊找鬼承粤。 笑死暴区,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的密任。 我是一名探鬼主播颜启,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼浪讳!你這毒婦竟也來了缰盏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤淹遵,失蹤者是張志新(化名)和其女友劉穎口猜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體透揣,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡济炎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辐真。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片须尚。...
    茶點(diǎn)故事閱讀 40,444評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖侍咱,靈堂內(nèi)的尸體忽然破棺而出耐床,到底是詐尸還是另有隱情,我是刑警寧澤楔脯,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布撩轰,位于F島的核電站,受9級特大地震影響昧廷,放射性物質(zhì)發(fā)生泄漏堪嫂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一木柬、第九天 我趴在偏房一處隱蔽的房頂上張望皆串。 院中可真熱鬧,春花似錦眉枕、人聲如沸愚战。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寂玲。三九已至,卻和暖如春梗摇,著一層夾襖步出監(jiān)牢的瞬間拓哟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工伶授, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留断序,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓糜烹,卻偏偏與公主長得像违诗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子疮蹦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 收錄文章::::::::::::::: iOS 13 適配要點(diǎn)總結(jié) 在Xcode 11 創(chuàng)建的工程诸迟,運(yùn)行設(shè)備選擇 ...
    紅涼夢閱讀 850評論 0 3
  • 在XCode11 之后,在我們新建工程的時(shí)候發(fā)現(xiàn)多了一個(gè)新增文件 SceneDelegate.swift 愕乎,然后我...
    飛天江郎閱讀 4,289評論 0 2
  • Xcode 11新建工程在Xcode 11 創(chuàng)建的工程阵苇,運(yùn)行設(shè)備選擇 iOS 13.0 以下的設(shè)備,運(yùn)行應(yīng)用時(shí)會出...
    Dayon閱讀 1,369評論 0 1
  • Xcode 11新建工程 在Xcode 11 創(chuàng)建的工程感论,運(yùn)行設(shè)備選擇 iOS 13.0 以下的設(shè)備绅项,運(yùn)行應(yīng)用時(shí)會...
    騎著豬的小哥哥閱讀 1,412評論 0 3
  • 9月20號iOS 13 已正式發(fā)布,第一時(shí)間更新了最新系統(tǒng)比肄,網(wǎng)上對其用戶體驗(yàn)上的新特性的描述也很多快耿,而對于開發(fā)者來...
    杰小冷_4957閱讀 583評論 0 2