ios 关于navigationController导航栏隐藏问题

本文探讨了在iOS应用中使用NavigationController时导航栏隐藏的问题。通过理解ViewController的生命周期,特别是`viewWillAppear`和`viewWillDisappear`方法,解决了在隐藏导航栏后,返回上一级时导航栏消失的困扰。关键在于,在`viewWillAppear`中隐藏导航栏,`viewWillDisappear`中显示导航栏,以实现正确的导航栏显示效果。

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

NavigationController导航栏设置隐藏,不知道你有没有尝试过下面这个方法。

self.navigationController.navigationBarHidden = YES;

在viewDidLoad这个方法里写的话,确实是把导航栏隐藏了,但是你有没发现,当你点击返回上一级的按钮时,上一级的导航栏也没有了。。。

这是为什么呢?这就需要你了解一下viewController的生命周期了

一、什么是ViewController的生命周期 (摘抄自http://www.cnblogs.com/xiaofeixiang/p/4387388.html?utm_source=tuicool&utm_medium=referral)

ViewController在App开发中是至关重要的一环,无论是页面的展示和数据之间的交互,ViewController提供了一个框架可以管理和构建App应用。iOS中构建App提供了两种方式一种是ViewController管理比如NavigationController和UITabBarController,另外一种就是我们经常打交道用到的自定义ViewController或者是常用UITableViewController展示我们需要的数据。下面这种苹果官网的图片可以加强理解:


生命周期(LifeCircle)

视图的生命周期其实可以理解为Load-Present-Hidden(加载-展现-隐藏)三个阶段,如果从ViewController中方法中执行的顺序来看,顺序应该是这样的:

loadView→viewDidLoad→viewWillAppear→viewDidAppear→viewWillDisappear→viewDidDisappear→dealloc

loadView:一般情况下不用用到,除非需要重写设置View;

viewDidLoad/dealloc:视图加载完成之后的设置和视图销毁的时候调用;

viewWillAppear/viewWillDisappear:视图即将呈现和视图即将消失;

viewDidAppear/viewDidDisappear:视图展现在屏幕的时候和视图完全消失在屏幕的时候调用,默认不做任何操作;

如果看生命周期的话,网上有很张类似这样的图,具体可以参考下,来源于苹果官网:


可以重写代码看下效果:

- (void)viewDidLoad {
  [super viewDidLoad];
  // Do any additional setup after loading the view, typically from a nib.
  NSLog(@"viewDidLoad-keso");
}
-(void)viewWillAppear:(BOOL)animated{
  NSLog(@"viewWillAppear-FlyElephant");
}
-(void)viewDidAppear:(BOOL)animated{
  NSLog(@"viewDidAppear");
}
-(void)viewWillDisappear:(BOOL)animated{
  NSLog(@"viewWillDisappear");
}
-(void)viewDidDisappear:(BOOL)animated{
  NSLog(@"viewDidDisappear-http://www.cnblogs.com/xiaofeixiang/");
}

viewWillLayoutSubviews和 viewDidLayoutSubviews如果使用到自动布局,需要修改自动布局中的约束条件,那么可以在viewWillLayoutSubviews中进行操作,最近遇到一个就是text文本框中文字过多的时候文字不能不能置顶,可以在viewWillDidSubviews中操作:

- (void)viewDidLayoutSubviews {
    [self.myTextView setContentOffset:CGPointZero animated:NO];
}

生命周期中几个方法的调用实际中需要看自己的操作,在正确的地方做正确的事,会事半功倍的,具体需要看自己的熟悉程度~

二、viewController生命周期和NavigationController导航栏的关系 (我不太擅长详细的语言描述,只是把自己隐藏导航栏的过程和错误展现一下)

1、刚开始的时候我是在push之前self.navigationController.navigationBarHidden = YES;发现什么效果都没有。。。



2.然后我就百度了一下,发现有说在viewdidappear方法或者viewWillAppear
中写self.navigationController.navigationBarHidden = YES;然后我就试了一下,发现,导航栏消失是消失了,但是返回上一级时,上一级的导航栏也没了。。。


然后又去百度,谷歌,有自己尝试了一下。。。发现了viewcontroller证明周期的神奇之处。。。

就是在viewWillAppear方法和viewWillDisappear方法中写上隐藏导航栏和显示导航栏,这两个方法是什么意思呢,我第一步已经详细的写过了,不过在这里我重新再说一下:

(1)、viewWillAppear方法:视图即将呈现时隐藏 self.navigationController.navigationBarHidden = YES;

(2)、viewWillDisappear方法:视图即将消失显示 self.navigationController.navigationBarHidden = NO;


这样,就很好的解决导航栏隐藏的问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值