此博客記錄現(xiàn)有項目升級iOS13所遇到的問題及解決方式图柏,可能并不全面序六,如果你遇到了其他問題,歡迎評論區(qū)留言蚤吹。Xcode版本11.0例诀;
1、UITextField的leftView裁着、rightView 顯示異常
如圖是我們工程使用textField自定義的searchBar繁涂,在iOS13中 發(fā)現(xiàn)搜索圖片居中顯示,設(shè)置背景色二驰,發(fā)現(xiàn)leftView占滿了整個textField扔罪。原代碼
UIView *leftView = [UIView new];
leftView.frame = CGRectMake(0, 0, 38, 38);
UIImageView *imageView = [[UIImageView alloc] initWithImage:k_IMAGE(@"icon_sousuo")];
[leftView addSubview:imageView];
[imageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(leftView);
}];
產(chǎn)生原因: 因為leftView的子視圖是使用約束布局的,雖然這里沒有約束圖片寬高桶雀,但是即使設(shè)置了也是一樣的效果矿酵。
解決方法:改為frame布局,代碼如下
imageView.frame = leftView.bounds;
2矗积、 UISearchBar 顯示問題
產(chǎn)生原因: 由于我們項目之前使用遍歷searchBar子視圖的方式獲取searchBar
中的textField
全肮,但是由于在iOS13中,textField
的層級關(guān)系改變了漠魏,所以這種方式獲取不到了倔矾,導(dǎo)致拿不到textField
,所有無法設(shè)置其中文字大小和顏色柱锹。
解決方式:iOS13中,UISeachBar多了一個屬性丰包,searchTextField
,可直接設(shè)置禁熏。
if (@available(ios 13.0,*)) {
searchBar.searchTextField.font = [UIFont systemFontOfSize:12];
searchBar.searchTextField.tintColor = [UIColor clearColor];
}else{
for (UIView *subView in [[searchBar.subviews lastObject] subviews]) {
if ([[subView class] isSubclassOfClass:[UITextField class]]) {
UITextField *textField = (UITextField *)subView;
textField.font = [UIFont systemFontOfSize:12];
textField.tintColor = [UIColor clearColor];
break;
}
}
}
3、禁止KVC獲取私有屬性
如上述獲取searchBar
中的textField
,之前也可以通過KVC的方式獲取:[searchBar valueForKey:@"_searchField"]
邑彪,iOS13請使用以上方式瞧毙。
以及之前使用KVC對textField
的占位文字顏色的處理,
[textField setValue:[UIColor red] forKeyPath:@"_placeholderLabel.textColor"];
//替換為
textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"輸入"attributes:@{NSForegroundColorAttributeName: [UIColor red]}];
也就是說,所有私有屬性宙彪,現(xiàn)在都不能用KVC獲取了??
4矩动、UITabBar選中文字顏色變成藍色
之前代碼:
// 未選中
[[UITabBarItem appearance] setTitleTextAttributes:
@{NSForegroundColorAttributeName:k_COLOR_HEX(@"#aaaaaa")}
forState:UIControlStateNormal];
// 選中
[[UITabBarItem appearance] setTitleTextAttributes:
@{ NSForegroundColorAttributeName: k_COLOR_CUSTOM_RED} forState:UIControlStateSelected];
解決方式:判斷iOS13版本,設(shè)置未選中的tintColor释漆,選中顏色就會正常??悲没,代碼如下:
if (@available(iOS 13.0, *)) {
[[UITabBar appearance] setUnselectedItemTintColor:k_COLOR_HEX(@"#aaaaaa")];
}
5、模態(tài)跳轉(zhuǎn)默認樣式改變
產(chǎn)生原因:因為蘋果將
UIViewController
的 modalPresentationStyle
屬性的默認值改成了新加的一個枚舉值 UIModalPresentationAutomatic
男图,對于多數(shù) UIViewController
示姿,此值會映射成 UIModalPresentationPageSheet
。解決方式:
方法一:給要模態(tài)跳轉(zhuǎn)的
UIViewController/UINavigationController
對象設(shè)置屬性nav.modalPresentationStyle = UIModalPresentationFullScreen;
方法二:如果你們模態(tài)跳轉(zhuǎn)的地方很多且沒有一個共同的父類逊笆,可以通過
Method Swizzling
來hook系統(tǒng)的方法modalPresentationStyle
栈戳,返回UIModalPresentationFullScreen
- (UIModalPresentationStyle)my_modalPresentationStyle {
return UIModalPresentationFullScreen;
}