大家在开发中,有些viewcontroller需要隐藏navigationbar,经常在这跳转的时候会出现黑条,白条的情况,在网上一查大部分给出的方案是在
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:animated];}- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.navigationController setNavigationBarHidden:NO animated:animated];}复制代码
大部分情况这样确实把问题解决了,代码也不难理解在这个viewcontroller将要出现的把navigationbar隐藏,在这个viewcontroller将要消失的时候把navigationbar重新展现出来。 可是当我们下一个跳转过去的viewcontroller也要隐藏navigationbar的时候,你的做法肯定也是复制上面的代码到需要隐藏的viewcontroller对吧,这时候你发现闪现的黑块又出现了, 为什么呢? 问题的关键就在
- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.navigationController setNavigationBarHidden:NO animated:animated];}复制代码
因为先是yes然后no然后yes,中间有个闪现的no。 大家就会发现我能不能做到不管怎么跳转,我都能随心所欲的控制我的navigationbar出现和隐藏呢,答案是能的。 一般大家都有基类viewcontroller,只要在基类viewcontroller中
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:self.navigationHidden animated:animated];}复制代码
这样你就随心所欲的控制了,只要你想要hidden。给navigationHidden属性赋值yes就好了。
方式二:根据navigation的代理方法来设置
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{ BOOL isHiddenNavBar = [viewController isKindOfClass:[self class]]; [self.navigationController setNavigationBarHidden:isHiddenNavBar animated:YES];}复制代码
文章完,但愿有帮到你。比心