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