也有一段時間沒有解決項目內問題,以爲解決問題要比無目的翻閱技術文檔有意義,目的性強記憶也深入。
項目中也算是碰見了兩處特定頁面問題了,上次是特定頁面支持橫屏的問題,此次是特定頁面支持隱藏導航欄問題。
問題描述:
接到修改時懵住了,忘記導航欄能夠隱藏這個問題了,仍是UI設計師給我拿出其餘App效果後,我才加緊尋找解決方案,看到導航欄隱藏幾個字,瞬間就笑了。常解決控制器實現特效啊、項目配置啊等等大難題,反而小學生的問題給懵住了。而後就開始設置隱藏導航欄的問題。
解決方案:
1.簡單講,在- (void)viewWillAppear;方法中隱藏導航欄;
2.在-(void)viewWillDisappear;方法中顯示導航欄;
存在問題:
僅作此處理是要出現兩個問題的;
1.消失是正常的,當childController作popViewController時,導航欄右側會閃現黑框,很是明顯;
2.當作模態presentViewcontroller彈出下一個帶有導航控制器的頁面時,本頁面導航欄會先復現導航欄再作跳轉;當childController作dismissViewController時,導航欄頂部會閃現黑框,很是明顯;
解決問題:
1.第一個問題較易解決,在隱藏方法裏設定動畫爲YES,在復現方法裏設定動畫爲NO;
2.第二個問題稍微麻煩些,要添加一個新的屬性來標註是否須要隱藏,稍後詳解;
先貼代碼:
導航欄隱藏方法:
- (void)viewWillAppear:(BOOL)animated {
[superviewWillAppear:animated];
if (_disappearLoginToviewWillAppear) {
_disappearLoginToviewWillAppear = NO;
}
else {
[self.navigationControllersetNavigationBarHidden:YESanimated:YES];
}
}
導航欄復現方法:
- (void)viewWillDisappear:(BOOL)animated {
[superviewWillDisappear:animated];
if (_presentLoginToViewWillDisappear) {
_presentLoginToViewWillDisappear = NO;
}
else {
[self.navigationControllersetNavigationBarHidden:NOanimated:YES];
}
}
兩個屬性(其實一個已經夠用,此處作理解才用兩個)
BOOL _presentLoginToViewWillDisappear; //是不是因爲彈起登陸視圖,致使我的中心控制器觸發viewWillDisappear
BOOL _disappearLoginToviewWillAppear; //是不是因爲登陸視圖彈出,致使我的中心控制器觸發viewWillAppear
跳轉處賦值屬性:
UIStoryboard *stroyboard = [UIStoryboardstoryboardWithName:@"Login"bundle:nil];
UINavigationController *loginNav = [stroyboard instantiateViewControllerWithIdentifier:@"LoginNavigation"];
_presentLoginToViewWillDisappear = YES;
[selfpresentViewController:loginNav animated:YEScompletion:^{
_disappearLoginToviewWillAppear = YES;
}];
註解:
爲何要添加一個屬性作判斷呢,由於咱們作隱藏和復現導航欄,邏輯上沒有錯,可是不能無論黑白一棒子打死,同一個導航欄狀況下,固然能夠簡單實現,可是做爲登陸頁面,多數做爲單獨模塊來作,確定不是一個導航控制器了,固然我也看過整個項目使用一個故事版完成幾十個頁面控制器的,我表示佩服,不懂怎麼作團隊協同,你說不協同,那我無話可說,你離開公司之後仍是一我的維護嗎?言歸正傳,若是不是一個導航控制器,你作隱藏導航欄是徒勞的,反而化蛇添足,因此,判斷下,是不是同一個導航欄,若是不是,那麼就不用復現了,保持隱藏。
寫在最後:
爲何整理這麼一篇低水準,較冷門的博文?我完成此功能前也上了不一樣網站尋找前師的教誨,可是很瑣碎,有些僅提示了思路,其實兩個問題中的第一個都沒有解決,僅告訴了進來的時候隱藏,出去的時候復現。第二個問題更是徹底沒涉及,我想,不會沒有人遇到一樣問題的,一個方便一次性決絕特定導航欄隱藏問題,另外一個是整理了大師們瑣碎的答案吧。最後仍是謝謝你們查閱,本小白,老鳥繞行,大牛輕拍!