天天看點

ios 兩句話解決,從無導航欄push到有導航欄界面,頂部閃現空白問題

這個問題也困擾了我挺久的,好多時候,主界面是沒有導欄的,點選按鈕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];
    }
}
           

寫完這兩句代碼,所有工作==就結束了~

ios 兩句話解決,從無導航欄push到有導航欄界面,頂部閃現空白問題