iOS正确解决隐藏导航栏后push和pop或dismiss和present闪黑问题

本文介绍在iOS开发中,如何根据不同场景需求灵活控制导航栏的显示与隐藏,包括在一级页面隐藏导航栏,二级页面显示导航栏的方法。通过实现UINavigationControllerDelegate代理方法,可以完美适配滑动返回手势,解决切换tabBar时导航栏动态隐藏的问题。

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

 

情景: 一级页面不显示导航栏 ,二级页面显示导航栏.

方法一 适用于push/pop:

一级页面中 

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    [self.navigationController setNavigationBarHidden:YES animated:animated];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    [self.navigationController setNavigationBarHidden:NO animated:animated];
}

方法二(都适用):

 设置self为导航控制器的代理,实现代理方法,在将要显示控制器中设置导航栏隐藏和显示,使用这种方式不仅完美切合滑动返回手势,同时也解决了切换tabBar的时候,导航栏动态隐藏的问题.

@interface HomePageController () <UINavigationControllerDelegate>

@end

@implementation HomePageController 

#pragma mark - lifeCycle
- (void)viewDidLoad {
    [super viewDidLoad];

    // 设置导航控制器的代理为self
    self.navigationController.delegate = self;
}

#pragma mark - UINavigationControllerDelegate
// 将要显示控制器
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    // 判断要显示的控制器是否是自己
    BOOL isShowHomePage = [viewController isKindOfClass:[self class]];

    [self.navigationController setNavigationBarHidden:isShowHomePage animated:YES];
}

 写个基类viewcontroller,只要在基类viewcontroller中:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:self.navigationHidden animated:animated];
}

这样你就随心所欲的控制了,只要你想要hidden。给navigationHidden属性赋值yes就好了。

转载于:https://www.cnblogs.com/dianming/p/7009435.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值