你解決不了的navigationbar問題都能在這里找到答案【原創(chuàng)】

之前寫過一篇文章解決navigationbar的漸變等自定義相關(guān)問題撤蚊。今天寫這個文章是想寫一下這兩天自己遇到的關(guān)于navigationbar的一些比較難解決的問題塞帐。navigationbar真的是一個寶藏,啥時候都能有新收獲盼理。

原理

每一個被push進(jìn)來的頁面都有自己的navigationcontroller俄删,通過navigationcontroller可以取到。關(guān)于這一點我們可以在代碼里看到畴椰。

屏幕快照 2017-06-19 下午4.20.05.png

如果連續(xù)push3個頁面,那么這三個頁面的navigationcontroller都是同一個抓艳。這一點我們通過打印三個頁面的self.navigationcontroller的地址就可以知道帚戳。

111.jpg

也就是說navigationcontroller像是一個房間儡首,每個viewcontroller像是一個人偏友,一個房間可以住進(jìn)很多個人蔬胯,每個人都可以找到自己的房子约谈,住進(jìn)這個房間以后就可以改變房子的外觀等屬性,就像是我們可以裝修刷漆等等棱诱。

常見問題

了解了這一點以后,很多關(guān)于導(dǎo)航欄的bug的原因自然也就了解炬灭。

  1. 設(shè)置了隱藏導(dǎo)航欄但是沒有隱藏
    首先要看設(shè)置導(dǎo)航欄是否在viewWillAppear靡菇,如果是重归,那么執(zhí)行完這個方法厦凤,而前一個VC還沒有銷毀的時候鼻吮,如果執(zhí)行了viewDidDisappear中的顯示導(dǎo)航欄方法较鼓,就無法隱藏了。如果檢查了發(fā)現(xiàn)沒有問題香椎,就要看是不是設(shè)置了當(dāng)前頁面的navigationcontroller的導(dǎo)航欄隱藏,這個問題比較容易出現(xiàn)層級中有present的頁面或者tabcontroller的情況下禽篱。如果都不是,bug的效果是閃現(xiàn)一下導(dǎo)航欄躺率,最終沒有顯示的情況,就要看前一個頁面是否設(shè)置了顯示悼吱,而且前一個頁面在當(dāng)前頁面被推出之前并沒有執(zhí)行到viewWillAppear方法而是之后才執(zhí)行的。這種情況下可以通過延遲二級頁面的push解決舆绎。
  2. 通過右滑手勢返回上一頁的時候,滑動產(chǎn)生偏移立即松手猎醇,會出現(xiàn)當(dāng)前導(dǎo)航欄消失的情況窥突。
    如果前一頁隱藏了導(dǎo)航欄硫嘶,而當(dāng)前頁設(shè)置了顯示導(dǎo)航欄,就可能會出現(xiàn)這樣的情況沦疾,比較少見,但是確實存在哮塞。當(dāng)時遇到這個bug的時候很懵逼,因為網(wǎng)上能查到的資料也不多忆畅。最終在GitHub上找到了解決方案
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];

    //MARK:偶爾在非郴捍祝快速的從第二個頁面取消拖返的時候,這里的輸出會是 1 0 1 0送粱。但是第二次的set hidden to no是有效的掂之。
    //猜測可能是由于動畫animated的原因抗俄,造成了第一次set hidden to no的還原板惑。具體未知
    //所以我們在下一個runloop里去重新設(shè)置下應(yīng)該就OK了
//    DLOG(@"1.hidden:%d",self.navigationController.navigationBarHidden);
    if (self.navigationController.navigationBarHidden) {
        [self.navigationController setNavigationBarHidden:NO animated:NO];
    }
//    DLOG(@"2.hidden:%d",self.navigationController.navigationBarHidden);
    dispatch_async(dispatch_get_main_queue(), ^{
//        DLOG(@"3.hidden:%d",self.navigationController.navigationBarHidden);
        if (self.navigationController.navigationBarHidden) {
            [self.navigationController setNavigationBarHidden:NO animated:NO];
        }
//        DLOG(@"4.hidden:%d",self.navigationController.navigationBarHidden);
    });
}

但是建議大家不要直接使用這個方法偎快,最好是在出錯頁面的viewDidAppear方法中去修改,這樣不會影響到其他頁面裆馒。

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:NO];
    if (self.navigationController.navigationBarHidden) {
        [self.navigationController setNavigationBarHidden:NO animated:NO];
    }
    
    dispatch_async(dispatch_get_main_queue(), ^{
        if (self.navigationController.navigationBarHidden) {
            [self.navigationController setNavigationBarHidden:NO animated:NO];
        }
    });
}

遇到的比較難解決的問題暫時就是這兩個丐怯,其他問題諸如手勢返回的時候?qū)Ш綑谙В际且驗闆]有設(shè)置動畫等比較簡單的原因读跷,也比較容易在網(wǎng)上找到答案,在這里就不再贅述了。
大家有遇到其他問題或者對文中有什么覺得不對的地方可以發(fā)在回復(fù)里荡短,我們一起探討啊哆键。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掘托,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子闪盔,更是在濱河造成了極大的恐慌辱士,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件识补,死亡現(xiàn)場離奇詭異族淮,居然都是意外死亡凭涂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門蝙斜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人孕荠,你說我怎么就攤上這事≈晌椋” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵个曙,是天一觀的道長受楼。 經(jīng)常有香客問我,道長艳汽,這世上最難降的妖魔是什么猴贰? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任河狐,我火速辦了婚禮瑟捣,結(jié)果婚禮上义郑,老公的妹妹穿的比我還像新娘。我一直安慰自己非驮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布劫笙。 她就那樣靜靜地躺著,像睡著了一般填大。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上圈浇,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天靴寂,我揣著相機與錄音,去河邊找鬼百炬。 笑死,一個胖子當(dāng)著我的面吹牛剖踊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播歇攻,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼梆造,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了澳窑?” 一聲冷哼從身側(cè)響起供常,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤栈暇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體煎源,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡手销,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年锋拖,在試婚紗的時候發(fā)現(xiàn)自己被綠了诈悍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兽埃。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡柄错,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出给猾,到底是詐尸還是另有隱情趁矾,我是刑警寧澤毫捣,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布蔓同,位于F島的核電站,受9級特大地震影響弃揽,放射性物質(zhì)發(fā)生泄漏则北。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望娜庇。 院中可真熱鬧,春花似錦励负、人聲如沸匕得。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晋南。三九已至羔砾,卻和暖如春姜凄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背态秧。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工申鱼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留愤诱,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓淫半,卻偏偏與公主長得像科吭,于是被迫代替她去往敵國和親猴鲫。 傳聞我的和親對象是個殘疾皇子拂共,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

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