iOS13 的適配

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

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

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

[searchBar valueForKey:@"_searcField"];

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

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

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

?myVC.modalPresentationStyle = UIModalPresentationFullScreen;

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

Privacy - Bluetooth Always Usage Description

替代了

Privacy - Bluetooth Peripheral Usage Description

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

4.兼容iOS13的黑色主題色

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

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

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

5.?LaunchImage將廢棄,使用LaunchScreen

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

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

6.tabbar 紅點偏移

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

?Push后Pop回來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]];

原來設(shè)置分割線的方式失效了,最新更改TabBar上細(xì)線方式實例,利用蘋果提供的新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è)三條杠會隨著主題色改變色彩,并不會檢測你自己設(shè)置的屏幕底色。兩種方法,

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

? ??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

之前為了處理搜索框的黑線問題會遍歷后刪除UISearchBarBackground,在iOS13會導(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棄用

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

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

iOS 13以前 document.body.scrollHeight iOS 13開始 document.documentElement.scrollHeight

12.CNCopyCurrentNetworkInfo變化

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

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

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

14.Xcode10往iOS13上編譯運行提示?Could not find Developer Disk Image

下載開發(fā)包

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

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

15.第三方登錄

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

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

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

17.App啟動過程中部分View可能無法實時獲取到frame

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

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

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

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