詳解iOS11關(guān)于導(dǎo)航欄問(wèn)題
前言
iOS11導(dǎo)航欄除了新加入了largeTitles和searchController兩個(gè)新特性,可能是加入largeTitles的原因其結(jié)構(gòu)較iOS 10發(fā)生了些變化。
iOS11之前導(dǎo)航欄的navigationBarButton則直接添加在navigationBar上面
在iOS11之后,蘋(píng)果添加了新的類(lèi)來(lái)管理,可以看到titleView直接加在_UINavigationBarContentView上,UIBarButtonItem則添加在_UIButtonBarStackView上面,而_UIButtonBarStackView則添加在_UINavigationBarContentView上面,最后添加到UINavigationBar上面,如下圖所示:
由于結(jié)構(gòu)的變化,在iOS 11中我們自定義設(shè)置leftBarButtonItem,其點(diǎn)擊區(qū)域變得很小,讓人點(diǎn)的很焦灼,如下圖綠色區(qū)域所示:
具體代碼如下,設(shè)置的frame在這里并沒(méi)有什么卵用,點(diǎn)擊區(qū)域依然只有圖片原本的size那么大:
UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 40)]; [btn setImage:imageWhite forState:UIControlStateNormal]; [btn addTarget:self action:@selector(bpBack) forControlEvents:UIControlEventTouchUpInside]; btn.backgroundColor = [UIColor greenColor]; UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:btn]; leftItem.width = 60; self.navigationItem.leftBarButtonItem = leftItem;
為了能增加點(diǎn)擊區(qū)域,我們就需要增加button的size,然后就想到通過(guò)改變ContentEdgeInsets來(lái)增大button的size,
... ... btn.backgroundColor = [UIColor greenColor]; if (@available(iOS 11.0,*)) { [btn setContentMode:UIViewContentModeScaleToFill]; [btn setContentEdgeInsets:UIEdgeInsetsMake(0, 5, 5, 20)]; } UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:btn]; ... ...
另:searchBar設(shè)置為titleview,會(huì)導(dǎo)致navigation的高度發(fā)生異常(ps:push到下一個(gè)界面,下個(gè)界面的view距離navigation出現(xiàn)了一段黑色區(qū)域)需要處理下:
CGRect frame = CGRectMake(0, 0, 150, 44); UISearchBar *search = [[UISearchBar alloc] initWithFrame:frame]; search.placeholder = @"搜索"; search.delegate = self; UITextField *searchField=[search valueForKey:@"_searchField"]; searchField.backgroundColor = [UIColor groupTableViewBackgroundColor]; // --- iOS 11異常處理 if(@available(iOS 11.0, *)) { [[search.heightAnchor constraintEqualToConstant:44] setActive:YES]; } self.navigationItem.titleView = search;
詳細(xì)資料參考:
https://stackoverflow.com/questions/45997996/ios-11-uisearchbar-in-uinavigationbar
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- iOS 封裝導(dǎo)航欄及返回,獲取控件所在控制器的實(shí)例
- 簡(jiǎn)單好用的iOS導(dǎo)航欄封裝.runtime屬性控制實(shí)例代碼
- 關(guān)于iOS導(dǎo)航欄返回按鈕問(wèn)題的解決方法
- iOS實(shí)現(xiàn)頂部標(biāo)簽式導(dǎo)航欄及下拉分類(lèi)菜單
- IOS仿今日頭條滑動(dòng)導(dǎo)航欄
- iOS應(yīng)用開(kāi)發(fā)中導(dǎo)航欄按鈕UIBarButtonItem的添加教程
- iOS如何去掉導(dǎo)航欄(UINavigationBar)下方的橫線
- iOS定制UISearchBar導(dǎo)航欄同步iOS11的方法
- iOS界面跳轉(zhuǎn)時(shí)導(dǎo)航欄和tabBar的隱藏與顯示功能
- iOS導(dǎo)航欄控制的一些總結(jié)
相關(guān)文章
iOS Runntime 動(dòng)態(tài)添加類(lèi)方法并調(diào)用-class_addMethod
這篇文章主要介紹了iOS Runntime 動(dòng)態(tài)添加類(lèi)方法并調(diào)用-class_addMethod的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08IOS 網(wǎng)絡(luò)請(qǐng)求中設(shè)置cookie
這篇文章主要介紹了IOS 網(wǎng)絡(luò)請(qǐng)求中設(shè)置cookie的相關(guān)資料,需要的朋友可以參考下2017-06-06IOS程序開(kāi)發(fā)之跳轉(zhuǎn)短信發(fā)送界面實(shí)現(xiàn)發(fā)送短信功能
在程序開(kāi)發(fā)中,我們經(jīng)常遇到這樣一功能:某個(gè)程序里面發(fā)送一些短信驗(yàn)證,那么基于代碼是如何實(shí)現(xiàn)的呢?下面小編通過(guò)本文給大家介紹IOS程序開(kāi)發(fā)之跳轉(zhuǎn)短信發(fā)送界面實(shí)現(xiàn)發(fā)送短信功能,有需要的朋友拿去用2016-01-01iOS中的多線程如何按設(shè)定順序去執(zhí)行任務(wù)詳解
多線程相信大家或多或少都有所了解吧,下面這篇文章主要給大家介紹了關(guān)于iOS中多線程如何按設(shè)定順序去執(zhí)行任務(wù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位iOS開(kāi)發(fā)者們的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-12-12iOS App中實(shí)現(xiàn)播放音效和音樂(lè)功能的簡(jiǎn)單示例
這篇文章主要介紹了iOS App中實(shí)現(xiàn)播放音效和音樂(lè)功能的簡(jiǎn)單示例,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-03-03僅需幾行代碼實(shí)現(xiàn)方便易用的狀態(tài)欄指示器
本文通過(guò)僅僅數(shù)行代碼實(shí)現(xiàn)了非常方便易用的狀態(tài)欄指示器,比如微博項(xiàng)目的微博數(shù)提醒框,需要的朋友可以參考下2015-08-08