這個問題也困擾了我挺久的,好多時候,主界面是沒有導欄的,點選按鈕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];
}
}
寫完這兩句代碼,所有工作==就結束了~
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90TUNd3YU5UNjpWT4FEVkZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DNyEjM1ETMxEDMykDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)