特定页面隐藏导航栏

     也有一段时间没有解决项目内问题,觉得解决问题要比无目的翻阅技术文档有意义,目的性强记忆也深刻。
     项目中也算是遇见了两处特定页面问题了,上次是特定页面支持横屏的问题,这次是特定页面支持隐藏导航栏问题。
 
     问题描述:
     接到修改时懵住了,忘记导航栏可以隐藏这个问题了,还是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;
                    }];
 
     
     注解:
     为什么要添加一个属性做判断呢,因为我们做隐藏和复现导航栏,逻辑上没有错,但是不能不管黑白一棒子打死,同一个导航栏情况下,当然可以简单实现,但是作为登录页面,多数作为单独模块来做,肯定不是一个导航控制器了,当然我也看过整个项目使用一个故事版完成几十个页面控制器的,我表示佩服,不懂怎么做团队协同,你说不协同,那我无话可说,你离开公司以后还是一个人维护吗?言归正传,如果不是一个导航控制器,你做隐藏导航栏是徒劳的,反而化蛇添足,所以,判断下,是否是同一个导航栏,如果不是,那么就不用复现了,保持隐藏。
 
     写在最后:
     为什么整理这么一篇低水准,较冷门的博文?我完成此功能前也上了不同网站寻找前师的教诲,但是很琐碎,有些仅提示了思路,其实两个问题中的第一个都没有解决,仅告诉了进来的时候隐藏,出去的时候复现。第二个问题更是完全没涉及,我想,不会没有人遇到同样问题的,一个方便一次性决绝特定导航栏隐藏问题,另一个是整理了大师们琐碎的答案吧。最后还是谢谢大家查阅,本小白,老鸟绕行,大牛轻拍!
原文地址:https://www.cnblogs.com/guoqiangx-5/p/5780224.html