navigationbar闪现黑条,白条问题

大家在开发中,有些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];
}

文章完,但愿有帮到你。比心

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容