咳咳党饮,最近兩天都在適配iOS11和iPhone X,在項(xiàng)目中遇到比較麻煩的一個(gè)適配是:在導(dǎo)航欄上添加的UISearchBar在iOS10及一下版本上顯示一切正常铐姚,但是當(dāng)我升級到了iOS11后刷喜,整個(gè)世界都不好了,導(dǎo)航欄上的UISearchBar不見了福澡。
最終我還是成功的再iOS11上將UINavigationBar上的UISearchBar顯示出來了,當(dāng)然解決問題的這個(gè)過程還是很艱辛的驹马,翻遍Google,Stack Overflow后終于找到了解決辦法除秀。再次記錄下吧糯累,希望能夠幫助到同樣遇到相同問題的各位開發(fā)者。
問題展示
先來一張圖對比下iOS10和iOS11兩個(gè)不同系統(tǒng)下册踩,在導(dǎo)航欄中添加UISearchBar的情況泳姐,大家先感受下:
情況大概就是這么一個(gè)情況,在iOS11上導(dǎo)航欄上的搜索框不見了暂吉。
接下來來分析一下代碼吧胖秒!
代碼分析
UIView *titleView = [[UIView alloc] init];
titleView.py_x = PYSEARCH_MARGIN * 0.5;
titleView.py_y = 7;
titleView.py_width = self.view.py_width - 64 - titleView.py_x * 2;
titleView.py_height = 30;
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:titleView.bounds];
[titleView addSubview:searchBar];
titleView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
self.navigationItem.titleView = titleView;
一般來說都是這樣將UISearchBar添加到導(dǎo)航欄上去的,先定義一個(gè)titleView慕的,將UIsearchBar添加到titleView阎肝,然后將titleView賦值給self.navigationItem.titleView。
解決辦法
將titleView的UIView重寫為XUIView肮街。
#import "XUIView.h"
@implementation XUIView
-(CGSize)intrinsicContentSize
{
return UILayoutFittingExpandedSize;
}
@end
然后將上面的代碼修改為:
UIView *titleView = [[XUIView alloc] init];
titleView.py_x = PYSEARCH_MARGIN * 0.5;
titleView.py_y = 7;
titleView.py_width = self.view.py_width - 64 - titleView.py_x * 2;
titleView.py_height = 30;
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:titleView.bounds];
[titleView addSubview:searchBar];
titleView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
self.navigationItem.titleView = titleView;
最后在iOS11上導(dǎo)航欄上的UISearchBar就顯示出來了~~