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的話(huà)渊鞋,要求我們必須提供各種屏幕尺寸的啟動(dòng)圖饼酿,來(lái)適配各種設(shè)備畔师,隨著蘋(píng)果設(shè)備尺寸越來(lái)越多,這種方式顯然不夠 Flexible糟红。而使用 LaunchScreen的話(huà)瘦癌,情況會(huì)變的很簡(jiǎn)單猪贪, LaunchScreen是支持AutoLayout+SizeClass的,所以適配各種屏幕都不在話(huà)下讯私。
從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萎庭,需要用戶(hù)開(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
強(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