iOS--UINavigationController学习笔记二

本文探讨了如何在iOS中定制statusBar,通过UINavigationController的子类和`childViewControllerForStatusBarStyle`、`childViewControllerForStatusBarHidden`方法实现对每个栈中viewController的独立控制。此外,还介绍了UINavigationControllerDelegate的使用,特别是在viewController显示生命周期中的调用时机,如`willShowViewController`和`didShowViewController`方法的执行阶段。
1.定制statusBar的新发现
      
       前面提到过,将View controller-based status bar appearance设为YES,通过设置UINavigationBar.barStyle来改变statusBar的状态。这样有一点不好的地方在于,通常在viewController里面改变这一属性的值是影响到全局的,一般在viewController消失之前会复原。但是,这几天在看果爹的api,发现ViewController里面有这么两个方法
- (nullableUIViewController*)childViewControllerForStatusBarStyleNS_AVAILABLE_IOS(7_0)__TVOS_PROHIBITED;
- (nullableUIViewController*)childViewControllerForStatusBarHidden NS_AVAILABLE_IOS(7_0)__TVOS_PROHIBITED;
官方的解释是说:如果这两个方法返回的是nil,在setNeedsStatusBarAppearanceUpdate方法调用之后,会调用自己的prefferedStatusBarStyle 和prefferedStatusBarHidden 方法,如果返回的是自己的childViewController,就是调用childViewController的prefferedStatusBarStyle 和prefferedStatusBarHidden 方法。这样,可以想到,设计一个UINavigationController的子类,复写上面的两个方法,统一返回UINavigationController.topViewController,这样每个UINavigationController栈中viewController,可以直接在prefferedStatusBarStyle 和prefferedStatusBarHidden方法中进行控制了。而且是不需要进行复原控制的。
       这种方法前提:是将View controller-based status bar appearance设为YES。

2.UINavigationControllerDelegate学习一

       UINavigationController提供了一个delegate,作用是可以全局定制一些导航栏的相关设置(最常见的就是统一定制导航栏顶部的返回样式),以及UINavigationController在进行push和pop的动画控制,现在好多文章都解释为转场动画,就是下一个场景(scene)viewController的view替代当前场景的viewController的view的动画。
      该delegate里面先是定义了下面两个方法:从方法名可以理解是在viewController将要显示时进行的调用。
- (void)navigationController:(UINavigationController*)navigationController willShowViewController:(UIViewController*)viewController animated:(BOOL)animated;
- (void)navigationController:(UINavigationController*)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated;
    那么,在UIViewController的显示生命周期中的哪个阶段进行调用的呢?通过Demo写代码,打Log得出的一个截图

可以得出willShowViewController是在willAppear之后,didShowViewController是在didAppear之后进行调用的 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值