条条大路通罗马,你是用这种方法隐藏和显示导航栏的吗?
- (void)viewWillAppear:(BOOL)animated {
[ super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
实话说,2015年我那会做iOS的时候也是这么做的[捂脸][捂脸],虽然当时这样做可以实现想要的结果,但是会很累,需要在控制中的每个显示和注销的- (void)viewWillAppear:(BOOL)animated - (void)viewWillDisappear:(BOOL)animated 添加一段代码。
真心讲这样写的代码很低效,自己的都不想看。为了让代码更优雅,让开发更高效,我们看看更优雅的编码方式;
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
}
这个方法不知道大家熟不熟悉,这个就是UINavigationController代理方法中的一个,它在有导航栏的控制器中,当控制器加载完,导航栏要出现的时候会调用。
既然是导航栏要出现的时候调用,那我们是不是可以在这里做判断呢,事实证明是可以的
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
BOOL isHiddenNavBar = [viewController isKindOfClass:[self class]];
[self.navigationController setNavigationBarHidden:isHiddenNavBar animated:YES];
}
当然这样做的前提是我们要实现实现UINavigationController的delegate
git: https://github.com/huxiao123/NavigationDemo