这个问题也困扰了我挺久的,好多时候,主界面是没有导栏的,点击按钮push到下一层时候是需要导航栏,然而当我们pop回去的时候,往往在原来的导航栏位置会出现44px高度的空白,究其原因,是导航栏未及时消失导致的,解决这个问题其实很简单,只需要两句话,但是句句经典。
第一步,在我们的工程中需要有BaseNavigationController,并且要确定你的app框架的搭建是建立在这个BaseNavigationController上的。
在BaseNavigationController.m中复写这个方法,
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated,注意要继承原有的方法,即
[super pushViewController:viewController animated:animated];
,在这个文件中全部代码如下:
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { [super pushViewController:viewController animated:animated]; [self setNavigationBarHidden:NO animated:YES]; }到这一步,还没完。
第二步,在需要隐藏导航栏的.m文件的
- (void)viewWillAppear:(BOOL)animated
这个方法中写下面一段代码,
[self.navigationController setNavigationBarHidden:YES animated:YES];
即可,在此文件中所有代码如下:
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:YES]; }
如果有需要的话,也可以这样设计,在BaseViewController的viewWillAppear方法中,来判断那个控制器需要显示导航栏,代码如下:
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; //控制是否显示导航栏 if ([self isKindOfClass:[BillViewController class]] || [self isKindOfClass:[MineViewController class]]) { [self.navigationController setNavigationBarHidden:YES animated:YES]; } }
写完这两句代码,所有工作==就结束了~