震惊:苹果手机电池栏“黑白无常”
前言:
当程序员👨🏻💻遇到难以解决的bug时,大家都会说同样的口头禅:真是见了鬼了(建国后不可以)
现象:
手机电池栏左黑右白,如下图
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-01-31-10-5329UVa0RAcNOcu11k.jpg)
👈🏻左边的时间是黑色的字体,右边的信号和电池是白色的字体👉🏻,这种感觉就像电池栏在呼喊:
我与你之间虽只差一个灵动岛的距离,却已是黑白相隔
心路历程:
初步断定应该是UIStatusBarStyle
的设置问题,查看App的infoplist
文件发现确实有 View controller-based status bar appearance = YES
的相关设置,有特殊需要的界面就需要自己手动处理一下
- (UIStatusBarStyle)preferredStatusBarStyle {
if (@avaliable(iOS 13.0,*)) {
return XXXX;
} else {
return XXXXX;
}
return XXXXXXX;
}
但是本着谁污染谁治理的原则,我没有特殊的场景我不处理,别的地方设置了也不应该影响我吧。再退一步来说,就算影响了,也不应该给我显示成这种左黑右白的鬼样子吧。不过产品说这个功能很高级,可以保留。玩笑归玩笑,问题还是得解决。
解决方案:
最先想到的肯定是给出问题的界面实现一下 preferredStatusBarStyle
,效果确实不错,解决了,如图:
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-01-31-10-54XrtmIogwSUXVR2810.jpg)
先解决了问题上线再说,就像罗永浩说的:
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-01-25-21-01qRlwCycypAHGrLQ.jpg)
但是这该死的求知欲天天折磨着我,直到今天在搞包体积的时候,脚本检测到这个大的背景图,发现是从左往右渐变加深的,难道和图片有关系?本着试一试的原则,把图片删除的同时并且把preferredStatusBarStyle
的代码注释掉,竟然好了,不可思议:
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-01-31-10-54kdRdnhVD7lT9MXz.jpg)
找设计师要了不带渐变的图片,又尝试了一把
![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-01-31-10-55MDIwZVJC31UaARUI.jpg)
对比俩种情况不难发现:
💡💡 是不是UIKit对导航栏背景图做了监听?目的是为了让用户可以清晰的看到电池栏的信息?
带着这个猜测,去看了下去年的WWDC,果然找到了答案:
在iOS17中,default
样式会根据内容的深浅调整status bar的颜色。
由于没有手动处理preferredStatusBarStyle
,而背景图又是从左到右渐变加深,所以电池栏显示成了左黑右白。
后语:
由此可见:
1、遇到难以解决的问题,把锅甩给系统bug是多么的机智🐶;
2、建国后还真的是:
![吴京达咩是什么梗-抖音](https://p3-pc-sign.douyinpic.com/image-cut-tos-priv/cf4bd746c56081bfea27fdb270fbb9a5~tplv-dy-resize-origshort-autoq-75:330.jpeg?x-expires=2017270800&x-signature=NfaU7w7ilx0XLImTixa1jRB1%2BdU%3D&from=3213915784&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=pcweb_cover&l=202312070910503EF49F220239E742B44F)
参考链接:
https://developer.apple.com/videos/play/wwdc2023/10055/?time=1512