更新iOS11后, 不少地方需要進(jìn)行適配系忙,本文主要講下UISearchBar的適配诵盼,首先我們來看兩張圖對(duì)比
我們發(fā)現(xiàn)設(shè)置 navigationItem.titleView 和 直接addSubview 的 UISearchbar樣式發(fā)生了明顯的變化,新版本的圓角有差異银还,而且 UITextField輸入的高度明顯更高些
更有意思的是风宁,設(shè)置iOS11下設(shè)置navigationItem.titleView 為 UISearchbar ,導(dǎo)航欄的高度和UISearchbar 高度也相應(yīng)的從 44 變成了 56
為解決一致性問題, 我們需要解決兩個(gè)問題
1蛹疯、導(dǎo)航欄和UISearchbar高度
2戒财、UISearchbar的UITextFiled高度
對(duì)于第一點(diǎn)可以使用設(shè)置約束的方法來解決
// iOS11版本以后 高度限制為44
if (IOS11_ORLATER) {
[self.heightAnchor constraintEqualToConstant:44].active = YES;
}
對(duì)于第二點(diǎn),可以動(dòng)態(tài)設(shè)置UISearchbar的UITextFiled高度
// 設(shè)置邊距
CGFloat top = 8;
CGFloat bottom = top;
CGFloat left = 12;
CGFloat right = left;
_insets = UIEdgeInsetsMake(top, left, bottom, right);
.....
// 獲取UITextField實(shí)例
NSArray *subviewArr = self.subviews;
for(int i = 0; i < subviewArr.count ; i++) {
UIView *viewSub = [subviewArr objectAtIndex:i];
NSArray *arrSub = viewSub.subviews;
for (int j = 0; j < arrSub.count ; j ++) {
id tempId = [arrSub objectAtIndex:j];
if([tempId isKindOfClass:[UITextField class]]) {
_searchField = (UITextField *)tempId;
}
}
}
.....
// 動(dòng)態(tài)設(shè)置UITextField的frame
if (IOS11_ORLATER) {
// iOS11版本以后進(jìn)行適配
CGRect frame = searchField.frame;
CGFloat offsetX = frame.origin.x - _insets.left;
CGFloat offsetY = frame.origin.y - _insets.top;
frame.origin.x = _insets.left;
frame.origin.y = _insets.top;
frame.size.height += offsetY * 2;
frame.size.width += offsetX * 2;
searchField.frame = frame;
}
最終效果:
非常簡(jiǎn)單捺弦,做次記錄饮寞,不值一提, Github demo傳送門: MADCompatNavBarForIOS11