震惊:苹果手机电池栏“黑白无常”

前言:

当程序员👨🏻‍💻遇到难以解决的bug时,大家都会说同样的口头禅:真是见了鬼了(建国后不可以)

现象:

手机电池栏左黑右白,如下图







👈🏻左边的时间是黑色的字体,右边的信号和电池是白色的字体👉🏻,这种感觉就像电池栏在呼喊:

我与你之间虽只差一个灵动岛的距离,却已是黑白相隔

心路历程:

初步断定应该是UIStatusBarStyle的设置问题,查看App的infoplist文件发现确实有 View controller-based status bar appearance = YES的相关设置,有特殊需要的界面就需要自己手动处理一下

less 复制代码
- (UIStatusBarStyle)preferredStatusBarStyle {
    if (@avaliable(iOS 13.0,*)) {
        return XXXX;
    } else {
        return XXXXX;
    }
    return XXXXXXX;
}

但是本着谁污染谁治理的原则,我没有特殊的场景我不处理,别的地方设置了也不应该影响我吧。再退一步来说,就算影响了,也不应该给我显示成这种左黑右白的鬼样子吧。不过产品说这个功能很高级,可以保留。玩笑归玩笑,问题还是得解决。

解决方案:

最先想到的肯定是给出问题的界面实现一下 preferredStatusBarStyle,效果确实不错,解决了,如图:







先解决了问题上线再说,就像罗永浩说的:







但是这该死的求知欲天天折磨着我,直到今天在搞包体积的时候,脚本检测到这个大的背景图,发现是从左往右渐变加深的,难道和图片有关系?本着试一试的原则,把图片删除的同时并且把preferredStatusBarStyle的代码注释掉,竟然好了,不可思议:







找设计师要了不带渐变的图片,又尝试了一把







对比俩种情况不难发现:

•无背景图,系统的导航栏显示的是黑色

•有背景图,系统的导航栏显示的是白色

💡💡 是不是UIKit对导航栏背景图做了监听?目的是为了让用户可以清晰的看到电池栏的信息?

带着这个猜测,去看了下去年的WWDC,果然找到了答案:

在iOS17中,default样式会根据内容的深浅调整status bar的颜色。

由于没有手动处理preferredStatusBarStyle,而背景图又是从左到右渐变加深,所以电池栏显示成了左黑右白。

后语:

由此可见:

1、遇到难以解决的问题,把锅甩给系统bug是多么的机智🐶;

2、建国后还真的是:





参考链接:

developer.apple.com/videos/play...

相关推荐
hunterandroid4 小时前
[鸿蒙从零到一] ArkUI 基础组件实战:Text、Image、Button 与 TextInput
前端
fsssb4 小时前
Chromium 源码学习笔记(五):一次点击,在进入 JS 之前先经历了什么?
前端
hunterandroid4 小时前
WorkManager 可靠性实战:唯一任务、重试与幂等设计
android·前端
鹿目4 小时前
使用 Vant CLI 搭建 UI 组件库:从 H5 到小程序跨平台
前端·javascript
默_笙4 小时前
😭 我花了两小时找了一个数据结构 bug,才把"迷你 Cursor"跑起来,绝望(bushi)
前端·javascript
竹林8185 小时前
wagmi v2 监听合约事件踩坑记:从 `useContractEvent` 到 `watchContractEvent`,我重构了三版才搞定实时数据流
前端·javascript
天若有情6735 小时前
纯HTML+Tailwind单页作品集网站——零框架静态前端完整源码
前端·html
WebGirl5 小时前
H5唤起app前端实现方案
前端
heimeiyingwang6 小时前
【架构实战】SQL注入与XSS防御:常见Web漏洞的系统性修复
前端·sql·架构
Larcher6 小时前
从零实现一个可运行的 RAG - LangChain、内存向量库与检索增强生成
前端·javascript