【iOS】记录一次虐心的状态栏问题

最近发现在自己开发的一款APP中,状态栏不见了,找了很久没有找到原因。

下面记录一下自己的爬坑经历:
1、首先我的项目中所使用的导航栏是采用自定义的方式实现,而且是黑色的,而状态栏采用的是全局控制为白色,也就是用下面的代码来处理处理的:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

除此设置之外,在Info.plist文件中增加一行设置:

View controller-based status bar appearance 设置为NO;

这些检查过了应该没问题。

2、后来考虑是不是哪里代码把状态栏隐藏了,于是在项目中全局搜索, setStatusBarHidden = NO,并没有发现隐藏的状态栏代码。

3、于是打开百度找资料,找到的要么是如何如何隐藏状态栏,要么是找到跟自己遇到的问题没啥关系的一些解决方法。
此处陆陆续续花费我大量时间。。。一把辛酸泪啊,貌似很简单的问题,到底问题出在哪儿呢?

4、今天无意中发现一个现象:就是APP初次安装的时候,状态栏是正常显示的,但是在次打开APP就不见了。呵呵,是不是特怪异?于是又打开度娘,搜索看下有没有跟我一样的问题,结果几乎没有!难道我是第一个遇到这么奇怪问题的?不可能吧。后来我静静的思考了一下,既然APP再次启动出现的问题,我何不顺藤摸瓜,看代码是一步步怎么执行的呢?于是乎,我打开代码调试,一行行的运行,查看,终于,终于,被我发现了代码中有这么一句:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
这是什么东东,好像不是我自己写的呀,有可疑。于是打开帮助文档,查看这个windowLevel的说明。官方文档是这么说的:
Window levels provide a relative grouping of windows along the z-axis. All windows assigned to the same window level appear in front of (or behind) all windows assigned to a different window level. The ordering of windows within a given window level is not guaranteed.
大概意思是,每个窗口都有一个显示的级别,分配给同一窗口级别的所有窗口都会出现在(或后面)分配给不同窗口级别的所有窗口前面。那这个窗口有几个级别呢,会不会是因为我这么设置导致把状态栏给挡住了呢?

于是,我又点开:UIWindowLevelAlert,这个值是一个常量,除了这个,另外还有2个,官方的说明是这样的:
let UIWindowLevelNormal: UIWindowLevel
The default level. 点进去是这样描述的:Use this level for the majority of your content, including for your app’s main window.
let UIWindowLevelStatusBar: 点进去是这样描述的:UIWindowLevel Windows at this level appear on top of your app's main window, but below alerts.
The level for a status window.
let UIWindowLevelAlert: UIWindowLevel
The level for an alert view. 点进去是这样描述的:Windows at this level appear on top of the status bar.
到现在已经很清晰了,UIWindowLevelAlert显示的是最外层的,因为它层级最高,其次是UIWindowLevelStatusBar,最后是默认等级的UIWindowLevelNormal。

分析这么多回到我刚才的代码,这行代码设置APP的根控制器比UIWindowLevelAlert还高,也就是至少是高于状态栏的,也就是把状态栏给遮挡住了。就是这么简单的问题,让我查资料,找问题花了好久!

最后我想跟大家说说为什么会写这行代码,不说了,太虐心了,这行代码是从度娘拷贝过来的。这里奉劝大家:不要随意拷贝代码,不要随意拷贝代码,不要随意拷贝代码,重要的事说三遍,如要拷贝至少要搞明白代码的意思才拷贝。多么惨痛的教训!做开发这么多年了不应该犯这种低级错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值