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

本文介绍了一种解决iOS应用中导航栏在某些场景下出现空白的问题的方法。通过修改BaseNavigationController并在特定视图控制器中调整导航栏的显示状态,可以有效避免导航栏消失不及时导致的视觉错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个问题也困扰了我挺久的,好多时候,主界面是没有导栏的,点击按钮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];
    }
}


写完这两句代码,所有工作==就结束了~


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值