特定頁面隱藏導航欄

     也有一段時間沒有解決項目內問題,以爲解決問題要比無目的翻閱技術文檔有意義,目的性強記憶也深入。
     項目中也算是碰見了兩處特定頁面問題了,上次是特定頁面支持橫屏的問題,此次是特定頁面支持隱藏導航欄問題。
 
     問題描述:
     接到修改時懵住了,忘記導航欄能夠隱藏這個問題了,仍是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;
                    }];
 
     
     註解:
     爲何要添加一個屬性作判斷呢,由於咱們作隱藏和復現導航欄,邏輯上沒有錯,可是不能無論黑白一棒子打死,同一個導航欄狀況下,固然能夠簡單實現,可是做爲登陸頁面,多數做爲單獨模塊來作,確定不是一個導航控制器了,固然我也看過整個項目使用一個故事版完成幾十個頁面控制器的,我表示佩服,不懂怎麼作團隊協同,你說不協同,那我無話可說,你離開公司之後仍是一我的維護嗎?言歸正傳,若是不是一個導航控制器,你作隱藏導航欄是徒勞的,反而化蛇添足,因此,判斷下,是不是同一個導航欄,若是不是,那麼就不用復現了,保持隱藏。
 
     寫在最後:
     爲何整理這麼一篇低水準,較冷門的博文?我完成此功能前也上了不一樣網站尋找前師的教誨,可是很瑣碎,有些僅提示了思路,其實兩個問題中的第一個都沒有解決,僅告訴了進來的時候隱藏,出去的時候復現。第二個問題更是徹底沒涉及,我想,不會沒有人遇到一樣問題的,一個方便一次性決絕特定導航欄隱藏問題,另外一個是整理了大師們瑣碎的答案吧。最後仍是謝謝你們查閱,本小白,老鳥繞行,大牛輕拍!
相關文章
相關標籤/搜索