ios 两句话解决,从无导航栏push到有导航栏界面,顶部闪现空白问题

时间:2022-11-17 23:27:24

这个问题也困扰了我挺久的,好多时候,主界面是没有导栏的,点击按钮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到有导航栏界面,顶部闪现空白问题