隐藏Navigationbar

基于之前的项目需要隐藏NaviagtionBar的页面,比如个人中心、搜索页 大都是在viewWillAppear里调用[self.navigationController setNavigationBarHidden:YES animated:YES];
我想大部分人都这样写。

这样写存在一个很大的问题:

不管你是跟视图还是子视图,当你在某个控制里把navigationBar隐藏了,那么在你push或pop的页面 都是没有navigationBar的。

然后大家在处理这个问题的时候一定是在push、pop的页面中在重写把上面的方法写一遍,让navigationBar显示对吧,如果一两个页面也好说,如果是基于这个页面push、pop很多不同类型的页面,那就要写很多了。有的人说在base的viewWillAppear里写成显示的,大家可以试试,在滑动过程中显示,当到达push的页面又隐藏里。

而不管你怎么写,这个方法总是调用的乱乱的,影响代码可读性。

而且你只要写在viewWillAppear里就有问题, 因为你手势滑动返回的时候,一瞬间 navigationBar 就隐藏,看起来像个bug,没有导航。然而好多人说写在viewDidAppear或viewDidDisappear中返回就没问题了,是没问题了,那么这样写在push的时候又会出问题,因为只有当push完成以后才会显示navigationBar,在push的过程中又没有导航。

So...怎么写感觉都有问题,而且越写越乱吧。

以上这个问题,教大家一个方法。

使用naviagtionController的代理方法:
navigationController:willShowViewController:animated: 判断是否是自己类的navigationBar,然后隐藏本类的navigationBar。

代码如下:

// 将要显示控制器
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    // 判断要显示的控制器是否是自己
    BOOL isShowHomePage = [viewController isKindOfClass:[self class]];
    [self.navigationController setNavigationBarHidden:isShowHomePage animated:YES];
}

你可能感兴趣的:(隐藏Navigationbar)