特定页面隐藏导航栏
也有一段時間沒有解決項目內問題,覺得解決問題要比無目的翻閱技術文檔有意義,目的性強記憶也深刻。 項目中也算是遇見了兩處特定頁面問題了,上次是特定頁面支持橫屏的問題,這次是特定頁面支持隱藏導航欄問題。 問題描述: 接到修改時懵住了,忘記導航欄可以隱藏這個問題了,還是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; ??????????????????? }]; ? ? ? ? ? ? ?注解: ? ? ?為什么要添加一個屬性做判斷呢,因為我們做隱藏和復現導航欄,邏輯上沒有錯,但是不能不管黑白一棒子打死,同一個導航欄情況下,當然可以簡單實現,但是作為登錄頁面,多數作為單獨模塊來做,肯定不是一個導航控制器了,當然我也看過整個項目使用一個故事版完成幾十個頁面控制器的,我表示佩服,不懂怎么做團隊協同,你說不協同,那我無話可說,你離開公司以后還是一個人維護嗎?言歸正傳,如果不是一個導航控制器,你做隱藏導航欄是徒勞的,反而化蛇添足,所以,判斷下,是否是同一個導航欄,如果不是,那么就不用復現了,保持隱藏。 ? ? ? ?寫在最后: ? ? ?為什么整理這么一篇低水準,較冷門的博文?我完成此功能前也上了不同網站尋找前師的教誨,但是很瑣碎,有些僅提示了思路,其實兩個問題中的第一個都沒有解決,僅告訴了進來的時候隱藏,出去的時候復現。第二個問題更是完全沒涉及,我想,不會沒有人遇到同樣問題的,一個方便一次性決絕特定導航欄隱藏問題,另一個是整理了大師們瑣碎的答案吧。最后還是謝謝大家查閱,本小白,老鳥繞行,大牛輕拍!
??? [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; ??????????????????? }]; ? ? ? ? ? ? ?注解: ? ? ?為什么要添加一個屬性做判斷呢,因為我們做隱藏和復現導航欄,邏輯上沒有錯,但是不能不管黑白一棒子打死,同一個導航欄情況下,當然可以簡單實現,但是作為登錄頁面,多數作為單獨模塊來做,肯定不是一個導航控制器了,當然我也看過整個項目使用一個故事版完成幾十個頁面控制器的,我表示佩服,不懂怎么做團隊協同,你說不協同,那我無話可說,你離開公司以后還是一個人維護嗎?言歸正傳,如果不是一個導航控制器,你做隱藏導航欄是徒勞的,反而化蛇添足,所以,判斷下,是否是同一個導航欄,如果不是,那么就不用復現了,保持隱藏。 ? ? ? ?寫在最后: ? ? ?為什么整理這么一篇低水準,較冷門的博文?我完成此功能前也上了不同網站尋找前師的教誨,但是很瑣碎,有些僅提示了思路,其實兩個問題中的第一個都沒有解決,僅告訴了進來的時候隱藏,出去的時候復現。第二個問題更是完全沒涉及,我想,不會沒有人遇到同樣問題的,一個方便一次性決絕特定導航欄隱藏問題,另一個是整理了大師們瑣碎的答案吧。最后還是謝謝大家查閱,本小白,老鳥繞行,大牛輕拍!
轉載于:https://www.cnblogs.com/guoqiangx-5/p/5780224.html
總結
- 上一篇: 【极光推送】给指定用户发送消息
- 下一篇: hive与hbase整合方式和优劣