博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS中关于NavigationController中preferredStatusBarStyle一直不执行的问题
阅读量:5232 次
发布时间:2019-06-14

本文共 2419 字,大约阅读时间需要 8 分钟。

重点:真的能改吗?跑起来毛用没有。

1、还要在plist文件里把View controller-based status bar appearance设置成YES。

2、一定要写UINavigationController分类

-、第一种做法(iOS9.0中已经废除,不建议使用)

  在iOS 7中,我们也可以使用UIApplication的statusBarStyle方法来设置状态栏,不过,首先需要停止使用View controller-based status bar appearance。在project target的Info tab中,插入一个新的key,名字为View controller-based status bar appearance,并将其值设置为NO。

 

  在需要改变状态栏颜色的ViewController中在ViewDidLoad方法中增加:

[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

  如果需要在全部View中都变色,可以写在父类的相关方法中,或者写到AppDelegate中。

二、介绍第二种做法,这个厉害(强烈推荐)

- (UIStatusBarStyle)preferredStatusBarStyle

  在需要的控制器里面重写这个方法,返回值就是UIStatusBarStyleDefault或者UIStatusBarStyleLightContent在该方法里面,如果只是简单的返回值而已,那么该界面在显示的时候会立马改变StatusBar的前景部分

  如果该VC已经显示出来了,你需要做的就是根据滚动的偏移量在实时更改StatusBar的前景颜色,那么你就要用到[self setNeedsStatusBarAppearanceUpdate];来显视调用preferredStatusBarStyle这个方法才能更改StatusBar的颜色然而毛用,根本不会调用
  要重写(创建UINavigationController一个Category,在分类里重写)

- (UIViewController *)childViewControllerForStatusBarStyle:

  这个方法默认返回值是nil。也就是当我们调用setNeedsStatusBarAppearanceUpdate的时候,系统会调用container(容器控制器)的preferredStatusBarStyle这个方法(app.window.rootViewController的preferred的方法,一般我们用UINavigationController或者UITabBarController来做container),也就是根本不会调用子控制器(我们所看到的UIViewcontroller)的preferredStatusBarStyle方法。这个时候- (UIViewController *)childViewControllerForStatusBarStyle:就派上用场了。

  给UINavigationController写一个Catogory,implementation如下,然后记得在需要的界面包含头文件就行

#import "UINavigationController+OLStatusBarStyle.h"  @implementation UINavigationController (OLStatusBarStyle) - (UIViewController *)childViewControllerForStatusBarStyle{   return self.visibleViewController; } - (UIViewController *)childViewControllerForStatusBarHidden{   return self.visibleViewController; }

  该类扩展的意思就是,我重写了,你不要调用Container(NavigationController或者UITabBarController)的preferredStatusBarStyle这个方法了,去调用self.visibleViewControllerpreferredStatusBarStyle,那么,我们写在UIViewcontroller里面的方法就会被调用了,就能更改StatusBar的前景颜色了。

  真的能改吗?跑起来毛用没有。还要在plist文件里把View controller-based status bar appearance设置成YES。
总结:
  只要UIViewController重写的childViewControllerForStatusBarStyle返回值不是nil,那么UIViewcontroller的preferredStatusBarStyle方法不会被系统的Container(NavigationController或者UITabBarController)调用,而是调用childViewControllerForStatusBarStyle返回的UIViewController的preferredStatusBarStyle来控制StatuBar的颜色

文/枫海(简书作者)
原文链接:http://www.jianshu.com/p/864b6033f6f4
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

转载于:https://www.cnblogs.com/wanglizhi/p/6065758.html

你可能感兴趣的文章
使用Thymeleaf
查看>>
2016/1/18
查看>>
[ACM] hdu 1134 Game of Connections(大数+Catalan数)
查看>>
03 docker容器镜像基础
查看>>
房屋价格数据采集与分析
查看>>
Python中类的继承代码实例
查看>>
MySQL常用sql语句-----数据表的增删改操作
查看>>
Python图像处理库PIL中图像格式转换
查看>>
hdu4370 dijkstra矩阵转单向边最短路矩阵+自环闭环
查看>>
Java学习笔记(2)
查看>>
查找文件工具find
查看>>
ios8以后,使用UIAlertViw时pop/push页面后,键盘闪一下的问题
查看>>
SQL之检索数据(select语句)
查看>>
[SDOI2015]排序 题解 (搜索)
查看>>
异 常
查看>>
快捷套取单色图片
查看>>
.NET-使用NPOI组件将数据导出Excel-通用方法
查看>>
团队作业8--版本说明
查看>>
数据库还原
查看>>
GDUFE ACM-1159
查看>>