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