前言:
iOS13以后多出來(lái)一個(gè)SceneDelegate類,這個(gè)類的出現(xiàn)時(shí)為了要分擔(dān)AppDelegate類的。
SceneDelegate類沒(méi)有出現(xiàn)之前,AppDelegate類擔(dān)任著 UI的生命周期 和 APP的生命周期,SceneDelegate類沒(méi)有出現(xiàn)之后,把UI的生命周期都給了這個(gè)類維護(hù)。
問(wèn)題:
那就出現(xiàn)了一個(gè)問(wèn)題,那就是以前項(xiàng)目的創(chuàng)建UITabbarController的代碼運(yùn)行在iOS13的設(shè)備上出現(xiàn)了黑屏或者不顯示或者崩潰的情況。
解決:
兩種解決方式:
1、直接把關(guān)于SceneDelegate類刪除掉,當(dāng)它沒(méi)有來(lái)過(guò)。
刪除步驟:
1)把info.plist這個(gè)鍵都刪除掉

image.png
2)把項(xiàng)目中這個(gè)類移除項(xiàng)目

image.png
3)把存在AppDelegate類中關(guān)于它的足跡都刪除掉

image.png
注意:這個(gè)解決方式就引發(fā)了另一個(gè)問(wèn)題,那就是刪除會(huì)不會(huì)有什么后遺癥。首先,要看你以后要不要用到,那這個(gè)類在什么時(shí)候,什么地點(diǎn)用到呢,那就是你的項(xiàng)目需要多個(gè)窗口的時(shí)候,比如IPod上的多個(gè)窗口,如果項(xiàng)目需要用的話,那么就是要保留的。
2,上面方式?jīng)]辦法實(shí)現(xiàn),那么就只能在代碼中適配了。
適配步驟:
1)在APPDelegate類中,對(duì)AppDelegate作分類,在前面直接@available(iOS 13.0, *)做標(biāo)記,意思是只有運(yùn)行到iOS13設(shè)備上才會(huì)調(diào)用這兩個(gè)方法,如果不做分類也可以,要在這兩個(gè)方法前面添加@available(iOS 13.0, *)。

image.png
2)直接在SceneDelegate類中前面添加@available(iOS 13.0, *)。意思與上面是一樣。

image.png
這樣其實(shí)在iOS13上就可以看到效果了,但是在iOS13以下的設(shè)備是不走這些方法的,所以要再適配一下iOS13以下的。
3)直接在APPDelegate類中,判斷是否是iOS13以上的設(shè)備,如果是iOS13以上的設(shè)備就不用創(chuàng)建了,因?yàn)閕OS13以上只能在SceneDelegate類去創(chuàng)建,上面說(shuō)到UI的生命周期已經(jīng)從APPDelegate類中奪過(guò)來(lái)了。那么如果是iOS13以下的設(shè)備就還是原來(lái)的老樣子!

image.png
總結(jié):
兩種方式都是可以的,如果項(xiàng)目中不需要用到這個(gè)SceneDelegate類,那就直接刪除掉。那如果需要用到的話那就老老實(shí)實(shí)的去適配吧!!