????蘋果要求6.30日前商店 App 需升級到 iOS13 sdk,百度了一下相關(guān)資料篙耗,并且做了一下升級,發(fā)現(xiàn) Xcode11
api文檔做了許多改動宪赶,估計底層實現(xiàn)變更了∽谕洌現(xiàn)在記錄如下:
UISegmentedControl
????默認樣式改變(UI有要求,務(wù)必優(yōu)化)搂妻。 iOS13以上對于通用的僅顏色UI的變更蒙保,可以通過創(chuàng)建子類來做覆蓋,設(shè)置一個自定義tintColor
替代欲主。 可以通過下面這三個方法設(shè)置純色圖片來還原之前的樣式邓厕。
- (void)setDividerImage:(nullable UIImage *)dividerImage forLeftSegmentState:(UIControlState)leftState rightSegmentState:(UIControlState)rightState barMetrics:(UIBarMetrics)barMetrics
- (void)setBackgroundImage:(nullable UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics
- (void)setTitleTextAttributes:(nullable NSDictionary<NSAttributedStringKey,id> *)attributes forState:(UIControlState)state API_AVAILABLE(ios(5.0)) UI_APPEARANCE_SELECTOR;
Dark Mode
????若不想支持深夜模式 逝嚎,只需要在Info.plist
下 新增鍵User Interface Style
值為Light即可。
模態(tài)彈出默認交互改變
????iOS 13新增了一個UIModalPresentationAutomatic
详恼,系統(tǒng)會默認UIModalPresentationStyle
為UIModalPresentationAutomatic
补君,并且模態(tài)推出現(xiàn)在默認會 get 到UIModalPresentationPageSheet
,通過運行時新寫一個 get 方法與系統(tǒng)方法交換,并且將UIModalPresentationPageSheet
改為UIModalPresentationFullScreen
即可,比較暴力昧互,如果有指定UIModalPresentationPageSheet
的可以通過額外屬性區(qū)分挽铁。
+(void)initialize{
// Xcode11+ iOS13兼容擴展 適配modalPresentationStyle導致的問題
Method systemGetModalPresentationStyle = class_getInstanceMethod(self.class, @selector(modalPresentationStyle));
Method ccGetModalPresentationStyle = class_getInstanceMethod(self.class, @selector(cc_modalPresentationStyle));
if (!class_addMethod(self.class, @selector(modalPresentationStyle), method_getImplementation(systemGetModalPresentationStyle), method_getTypeEncoding(systemGetModalPresentationStyle))) {
method_exchangeImplementations(systemGetModalPresentationStyle, ccGetModalPresentationStyle);
}
}
- (UIModalPresentationStyle)cc_modalPresentationStyle{
UIModalPresentationStyle modalPresentationStyle = [self cc_modalPresentationStyle];
if (modalPresentationStyle == (UIModalPresentationStyle)-2) {
modalPresentationStyle = UIModalPresentationFullScreen;
}
if (modalPresentationStyle == UIModalPresentationPageSheet){
modalPresentationStyle = UIModalPresentationFullScreen;
}
return modalPresentationStyle;
}
私有方法KVC 不允許使用
目前發(fā)現(xiàn)的有如下幾種
-
UITextField
的valueForKey:@"_placeholderLabel.textColor"
使用
attributedPlaceholder
替代,可以使用子類或者擴展來優(yōu)化 -
UISearchBar
的valueForKey:@"_searchField"
UITextField *searchField; if ([UIDevice currentDevice].systemVersion.floatValue > 12.3) { searchField = searchBar.searchTextField; }else{ searchField = [searchBar valueForKey:@"_searchField"]; }
-
[[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
可以在基類下使用 `UIView` 來替代設(shè)置 `StatusBar` 的背景顏色敞掘。
UIStatusBarStyle
iOS以上 UIStatusBarStyleDefault
會跟隨系統(tǒng)深夜模式自動變化叽掘,如果不支持深夜模式的 App 可以通過宏調(diào)整
MPMoviePlayerController
使用 AVKit 替換即可
LaunchImage
????要求使用 LaunchScreen.storyboard
,刪除 LaunchImage.assets
玖雁,新建 LaunchScreenImage
更扁,修改Content.json
如下,設(shè)置對應(yīng)大小圖片赫冬,在 StoryBoard
新建 ImageView
設(shè)置約束浓镜,若需要滿屏,調(diào)整不遵守安全間距即可
{
"images" : [
{
"idiom" : "iphone",
"scale" : "1x"
},
{
"idiom" : "iphone",
"scale" : "2x"
},
{
"idiom" : "iphone",
"filename" : "Default-736.png",
"scale" : "3x"
},
{
"idiom" : "iphone",
"subtype" : "retina4",
"scale" : "1x"
},
{
"idiom" : "iphone",
"filename" : "Default-568.png",
"subtype" : "retina4",
"scale" : "2x"
},
{
"idiom" : "iphone",
"subtype" : "retina4",
"scale" : "3x"
},
{
"idiom" : "iphone",
"filename" : "Default-736.png",
"subtype" : "736h",
"scale" : "3x"
},
{
"idiom" : "iphone",
"filename" : "Default-667.png",
"subtype" : "667h",
"scale" : "2x"
},
{
"idiom" : "iphone",
"filename" : "Default-812.png",
"subtype" : "2436h",
"scale" : "3x"
},
{
"idiom" : "iphone",
"filename" : "Default-1242.png",
"subtype" : "2688h",
"scale" : "3x"
},
{
"idiom" : "iphone",
"filename" : "Default-828.png",
"subtype" : "1792h",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
UITextField 設(shè)置LeftView及RightView
????iOS13 在設(shè)置左右視圖是 UIImageView
的時候面殖,需要在 UIImageView
外層包裹一次 UIView
視圖竖哩,才能保證想要的間距效果〖沽牛可以通過交互方法重寫 setLeftView
與 setRightView
相叁,在外層包裹 UIView
,并賦值相應(yīng) frame
。若有特殊配置辽幌,可以通過判斷視圖類增淹,做針對性包裹。
UISearchBar 黑線處理導致崩潰
`NSClassFromString(@"UISearchBarBackground")`
藍牙權(quán)限需要申請
如果有藍牙使用的App乌企,需要設(shè)置權(quán)限獲取
第三方SDK升級
注:目前僅發(fā)現(xiàn)這些必須要修正的問題, UIWebView
升級改造需要在 2020 年底以前完成虑润。