iOS13 的適配

1.限制使用 KVC 修改私有屬性

iOS13以后已經(jīng)不能肆無(wú)忌憚的通過(guò)?KVC來(lái)修改一些沒(méi)有暴露出來(lái)的屬性了,否則會(huì)崩潰,例如以下代碼

[_textField setValue:[UIColor xxx] forKeyPath:@"_placeholderLabel.textColor"];?

[searchBar valueForKey:@"_searcField"];

可以通過(guò) TextField 的 attributeString 設(shè)置

2.模態(tài)彈出默認(rèn)交互改變

之前的默認(rèn)交互是UIModalPresentationFullScreen,iOS13 后是UIModalPresentationAutomatic.設(shè)置一下即可

?myVC.modalPresentationStyle = UIModalPresentationFullScreen;

3.藍(lán)牙權(quán)限說(shuō)明

Privacy - Bluetooth Always Usage Description

替代了

Privacy - Bluetooth Peripheral Usage Description

info.plist 必須要添加Privacy - Bluetooth Always Usage Description,否則會(huì)崩潰;

4.兼容iOS13的黑色主題色

升級(jí) iOS13 以后,默認(rèn)UIUserInterfaceStyle為 Dark,導(dǎo)致很多界面顯示風(fēng)格不一致,

? ??4.1,識(shí)別當(dāng)前的配色方案,可以通過(guò)viewcontroller.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark來(lái)獲取,需要添加if (@available(iOS 12.0, *))以支持iOS12以下的系統(tǒng)。

? ??4.2,全局關(guān)閉黑暗模式,如果前期沒(méi)有足夠時(shí)間去適配暗黑模式,可以通過(guò)全局關(guān)閉黑暗模式避免暗黑模式下顯示問(wèn)題,只需要在 info.plist 文件里將UIUserInterfaceStyle key 的值設(shè)置為 Light即可

5.?LaunchImage將廢棄,使用LaunchScreen

使用LaunchImage的話,要求我們必須提供各種屏幕尺寸的啟動(dòng)圖,來(lái)適配各種設(shè)備,隨著蘋(píng)果設(shè)備尺寸越來(lái)越多,這種方式顯然不夠 Flexible。而使用 LaunchScreen的話,情況會(huì)變的很簡(jiǎn)單, LaunchScreen是支持AutoLayout+SizeClass的,所以適配各種屏幕都不在話下。

從2020年4月開(kāi)始,所有使? iOS13 SDK的 App將必須提供 LaunchScreen,LaunchImage即將退出歷史舞臺(tái)。

6.tabbar 紅點(diǎn)偏移

如果之前有通過(guò)TabBar上圖片位置來(lái)設(shè)置紅點(diǎn)位置,在iOS13上會(huì)發(fā)現(xiàn)顯示位置都在最左邊去了。遍歷UITabBarButton的subViews發(fā)現(xiàn)只有在TabBar選中狀態(tài)下才能取到UITabBarSwappableImageView,解決辦法是修改為通過(guò)UITabBarButton的位置來(lái)設(shè)置紅點(diǎn)的frame

?Push后Pop回來(lái)tabbar選中文字顏色變系統(tǒng)藍(lán)色

self.tabBar.tinColor = color;

或者

if (@available(iOS 10.0, *)) {

self.tabBar.unselectedItemTintColor = color;

}

7. UITabBar上分割線呢操作

[[UITabBar appearance] setBackgroundImage:[UIImage new]];

[[UITabBar appearance] setShadowImage:[UIImage new]];

原來(lái)設(shè)置分割線的方式失效了,最新更改TabBar上細(xì)線方式實(shí)例,利用蘋(píng)果提供的新API,為所欲為(改圖片,改顏色)

if (@available(iOS 13, *)) {

#ifdef __IPHONE_13_0

UITabBarAppearance *appearance = [self.tabBar.standardAppearance copy];

appearance.backgroundImage = [UIImage new];

appearance.shadowImage = [UIImage imageNamed:@"Dotted_Line"];

appearance.shadowColor = [UIColor clearColor];

self.tabBar.standardAppearance = appearance;

#endif

} else {

self.tabBar.backgroundImage = [UIImage new];

self.tabBar.shadowImage = [UIImage imageNamed:@"Dotted_Line"];

}

8.可排序tableview的右側(cè)三條杠會(huì)隨著主題色改變色彩,并不會(huì)檢測(cè)你自己設(shè)置的屏幕底色。兩種方法,

? ? 3.1.根據(jù)上面的方法來(lái)識(shí)別主題色從而給不同的底色來(lái)適配。

? ??3.2.強(qiáng)行更改三條杠為其他圖片。

for (UIView * view in self.subviews)

????{

????????if ([NSStringFromClass([view class]) rangeOfString:@"Reorder"].location != NSNotFound)

????????{

????????????for (UIView * subview in view.subviews)

????????????{

????????????????if ([subview isKindOfClass: [UIImageView class]])

????????????????{

????????????????????((UIImageView *)subview).image = .....;

????????????????}

????????????}

????????}

? ?}


9.黑線處理crash

之前為了處理搜索框的黑線問(wèn)題會(huì)遍歷后刪除UISearchBarBackground,在iOS13會(huì)導(dǎo)致UI渲染失敗crash;解決辦法是設(shè)置UISearchBarBackground的layer.contents為nil

public func clearBlackLine()

{

for view in self.subviews.last!.subviews

{

if view.isKind(of:NSClassFromString("UISearchBarBackground")!)

{

view.backgroundColor=UIColor.white

view.layer.contents=nilbreak

}

}

10.UIWebView棄用

蘋(píng)果已經(jīng)從iOS13禁止UIWebView方式了,需要更換WKWebView(過(guò)渡期仍可用,只是郵件警告,目前不影響審核)

11.WKWebView 中測(cè)量頁(yè)面內(nèi)容高度的方式變更

iOS 13以前 document.body.scrollHeight iOS 13開(kāi)始 document.documentElement.scrollHeight

12.CNCopyCurrentNetworkInfo變化

iOS13下不能正常獲取到WiFi的ssid,需要用戶開(kāi)啟定位權(quán)限或者使用新的API?NEHotspotConfiguration獲取

13.在其他queue里不能直接創(chuàng)建viewcontroller,alloc都不行,否則會(huì)被阻塞。

以往我都是先創(chuàng)建好controller,在present的時(shí)候再跑到dispatch_async(dispatch_get_main_queue()里,但iOS13不行,創(chuàng)建controller時(shí)就需要在main queue里。

14.Xcode10往iOS13上編譯運(yùn)行提示?Could not find Developer Disk Image

下載開(kāi)發(fā)包

強(qiáng)制退出Xcode(必須退出干凈)

前往"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport"粘貼解壓縮文件(以自己實(shí)際路徑實(shí)際名稱(chēng))

15.第三方登錄

蘋(píng)果更新的審核規(guī)范中提到使用第三方登錄的APP必須要將apple登錄作為一個(gè)可選擇項(xiàng),且必須放首位.

16.MPMoviePlayerController 在iOS 13已經(jīng)不能用了

替代方案就是AVKit里面的那套播放器。

17.App啟動(dòng)過(guò)程中部分View可能無(wú)法實(shí)時(shí)獲取到frame

可能是為了優(yōu)化啟動(dòng)速度,App 啟動(dòng)過(guò)程中,部分View可能無(wú)法實(shí)時(shí)獲取到正確的frame

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容