iOS11適配 - UINavigationBar上添加UISearchBar

咳咳,最近兩天都在適配iOS11和iPhone X,在項目中遇到比較麻煩的一個適配是:在導航欄上添加的UISearchBar在iOS10及一下版本上顯示一切正常,但是當我升級到了iOS11后,整個世界都不好了,導航欄上的UISearchBar不見了。

最終我還是成功的再iOS11上將UINavigationBar上的UISearchBar顯示出來了,當然解決問題的這個過程還是很艱辛的,翻遍Google,Stack Overflow后終于找到了解決辦法。再次記錄下吧,希望能夠幫助到同樣遇到相同問題的各位開發(fā)者。

問題展示

先來一張圖對比下iOS10和iOS11兩個不同系統(tǒng)下,在導航欄中添加UISearchBar的情況,大家先感受下:

iOS11以下版本

iOS11

情況大概就是這么一個情況,在iOS11上導航欄上的搜索框不見了。

接下來來分析一下代碼吧!

代碼分析

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添加到導航欄上去的,先定義一個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上導航欄上的UISearchBar就顯示出來了~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 相信大家已經(jīng)被iPhoneX的劉海洗腦了,除了吐槽,留給我們的還有比較麻煩的適配工作。下面針對在整理過程中發(fā)現(xiàn)的適...
    smile麗語閱讀 5,019評論 6 21
  • 更新iOS11后, 不少地方需要進行適配,本文主要講下UISearchBar的適配,首先我們來看兩張圖對比 我們發(fā)...
    madaoCN閱讀 9,261評論 6 7
  • 編譯器升級xcode9,準備適配一下iphoneX的布局,調(diào)試時發(fā)現(xiàn)由于一些ios11新特性或者底層變化的原因,x...
    YY程序猿閱讀 3,993評論 4 28
  • 適配 iPhone X 的相關(guān)內(nèi)容詳見我的另一篇文章關(guān)于 SafeArea 和 適配 iPhoneX 前言 又是一...
    KavinZhou閱讀 6,916評論 18 25
  • App界面適配iOS11(包括iPhoneX的奇葩尺寸) 一劍孤城關(guān)注 2017.08.15 11:15*字數(shù) 1...
    珊珊大王閱讀 1,167評論 0 2

友情鏈接更多精彩內(nèi)容