iOS系統(tǒng)導(dǎo)航欄引起的位置职车、顏色一系列問題

引言:小編的手上有個(gè)導(dǎo)航欄是用系統(tǒng)的導(dǎo)航欄做的項(xiàng)目遮斥,最近由于系統(tǒng)的導(dǎo)航欄爆出了一系列的問題竣况,在使用系統(tǒng)導(dǎo)航欄的時(shí)候這些問題大家應(yīng)該也會遇到克婶,所以在這里將問題和解決方案提出筒严,供大家參考。

問題情形:
一:給導(dǎo)航欄設(shè)置顏色發(fā)現(xiàn)與自己設(shè)置的顏色有差別
二:設(shè)置界面被導(dǎo)航欄擋住了一部分

三:在iphone全面屏上使用導(dǎo)航欄跳轉(zhuǎn)到下個(gè)界面時(shí)情萤,底部會先黑一下然后再顯示自己設(shè)置的界面
12312313.jpeg

四:在iOS12系統(tǒng)以上的iPhone上鸭蛙,使用導(dǎo)航欄返回到上個(gè)界面時(shí),標(biāo)簽欄的圖標(biāo)位置會偏右上然后再移動到原始的位置
123123.jpeg

問題解決:
一:顏色有差別是因?yàn)橄到y(tǒng)導(dǎo)航欄默認(rèn)有一層蒙層
解決辦法:
1.添加下面這句就能解決問題

[[UINavigationBar appearance] setTranslucent:NO];

2.有些人說使用下面這句也能解決問題

self.navigationController.navigationBar.translucent = NO;

這句看起來貌似和上句設(shè)置的屬性是同一個(gè)筋岛,其實(shí)還是有差別的
差別一:兩句生效的時(shí)機(jī)不同娶视,在控制器中添加了[[UINavigationBar appearance] setTranslucent:NO];會發(fā)現(xiàn)導(dǎo)航欄顏色沒有問題了,但是添加了self.navigationController.navigationBar.translucent = NO;卻發(fā)現(xiàn)顏色跟沒設(shè)置這個(gè)屬性時(shí)一樣睁宰,還是有問題肪获,好像這句代碼并沒有生效一樣。
是的柒傻,確實(shí)是這句代碼沒生效孝赫。具體原因小編也沒搞懂,希望大神們能解惑红符。小編猜測可能是這句代碼寫在- (void)viewDidLoad 這個(gè)方法時(shí)導(dǎo)航欄還沒初始化青柄,所以導(dǎo)致這句代碼沒生效。
解決方案:
在視圖將要出現(xiàn)是設(shè)置這個(gè)屬性就能生效预侯。使用這個(gè)方法的一定要注意了致开,是在視圖將要出現(xiàn)的時(shí)候添加這個(gè)方法!

- (void)viewWillAppear:(BOOL)animated
{
    self.navigationController.navigationBar.translucent = NO;
}

差別二:
self.navigationController.navigationBar.translucent = NO;能解決導(dǎo)航欄透明問題萎馅。
[[UINavigationBar appearance] setTranslucent:NO];不能解決導(dǎo)航欄透明問題
因?yàn)橥该鲿?dǎo)致下面的這個(gè)問題

二:界面被導(dǎo)航欄擋住了一部分是因?yàn)閷?dǎo)航欄透明屬性導(dǎo)致的
第一個(gè)問題在解決顏色問題時(shí)用到了self.navigationController.navigationBar.translucent = NO;
這個(gè)屬性除了能解決顏色問題還能解決導(dǎo)航欄遮擋問題双戳。
系統(tǒng)默認(rèn)這個(gè)屬性為YES,導(dǎo)航欄為透明。當(dāng)導(dǎo)航欄為透明時(shí)校坑,controller中self.view的原點(diǎn)是從導(dǎo)航欄左上角開始計(jì)算拣技,所以當(dāng)在設(shè)置控件的位置不注意時(shí)就會造成被導(dǎo)航欄遮擋一部分。
當(dāng)設(shè)為NO時(shí)耍目,導(dǎo)航欄為不透明膏斤,controller中self.view的原點(diǎn)是從導(dǎo)航欄左下角開始計(jì)算。所以當(dāng)發(fā)現(xiàn)被遮擋時(shí)邪驮,設(shè)置這個(gè)屬性為NO就能解決被遮擋問題莫辨。

三:在iOS11以后出現(xiàn)了全面屏,蘋果增加了安全區(qū)域概念毅访,在iOS11以上的版本中的tabview和webview都需要設(shè)置下面?zhèn)€屬性否則會出現(xiàn)這個(gè)問題

if (@available(iOS 11.0, *)) {
        self.webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
        //self.tabview.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    }

四:在iOS12以上出現(xiàn)這個(gè)問題沮榜,是因?yàn)槭褂孟到y(tǒng)導(dǎo)航欄默認(rèn)的返回導(dǎo)致的。當(dāng)自己使用[self.navigationController popViewControllerAnimated:NO];返回時(shí)不會出現(xiàn)這種情況喻粹。所以解決方案是蟆融,不使用系統(tǒng)導(dǎo)航欄的返回,但需要返回時(shí)自己使用[self.navigationController popViewControllerAnimated:NO];返回守呜。
解決方案:
1.導(dǎo)航欄上的返回按鈕不使用系統(tǒng)的型酥,自己添加按鈕山憨,在返回按鈕的點(diǎn)擊事件里使用[self.navigationController popViewControllerAnimated:NO];返回上個(gè)界面
2.如果使用系統(tǒng)的返回可以先攔截系統(tǒng)的返回事件,然后再重寫返回方法弥喉,使用[self.navigationController popViewControllerAnimated:NO];返回郁竟。
下載UIViewController+BackButtonHandler將UIViewController+BackButtonHandler.h和.m文件放到項(xiàng)目中,導(dǎo)入#import "UIViewController+BackButtonHandler.h"添加下面這個(gè)方法

// 截取系統(tǒng)返回事件
- (BOOL)navigationShouldPopOnBackButton{
    [self.navigationController popViewControllerAnimated:NO];
    return NO;
}

這個(gè)方法是攔截系統(tǒng)的返回事件由境,并使用[self.navigationController popViewControllerAnimated:NO];返回棚亩。NO是不允許系統(tǒng)返回,YES是允許系統(tǒng)返回虏杰。

UIViewController+BackButtonHandler代碼分析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讥蟆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嘹屯,更是在濱河造成了極大的恐慌攻询,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件州弟,死亡現(xiàn)場離奇詭異,居然都是意外死亡低零,警方通過查閱死者的電腦和手機(jī)婆翔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掏婶,“玉大人啃奴,你說我怎么就攤上這事⌒弁祝” “怎么了最蕾?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長老厌。 經(jīng)常有香客問我瘟则,道長,這世上最難降的妖魔是什么枝秤? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任醋拧,我火速辦了婚禮,結(jié)果婚禮上淀弹,老公的妹妹穿的比我還像新娘丹壕。我一直安慰自己,他們只是感情好薇溃,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布菌赖。 她就那樣靜靜地躺著,像睡著了一般沐序。 火紅的嫁衣襯著肌膚如雪琉用。 梳的紋絲不亂的頭發(fā)上忿峻,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機(jī)與錄音辕羽,去河邊找鬼逛尚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛刁愿,可吹牛的內(nèi)容都是我干的绰寞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼铣口,長吁一口氣:“原來是場噩夢啊……” “哼滤钱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起脑题,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤件缸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后叔遂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體他炊,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年已艰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痊末。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哩掺,死狀恐怖凿叠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嚼吞,我是刑警寧澤盒件,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站舱禽,受9級特大地震影響炒刁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呢蔫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一切心、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧片吊,春花似錦绽昏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至爷贫,卻和暖如春认然,著一層夾襖步出監(jiān)牢的瞬間补憾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工卷员, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盈匾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓毕骡,卻偏偏與公主長得像削饵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子未巫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容