特定页面隐藏导航栏

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