情景复现
在调试“存钱猪猪”应用时,发现夜晚模式存在问题无法识别的问题。
报错截图
![](https://fangjunyu.com/wp-content/uploads/2024/06/1-3.png)
导致应用在夜晚模式下,图标是黑色的,看不到底部导航的文字和图标内容。
![](https://fangjunyu.com/wp-content/uploads/2024/06/2-3.png)
经过调试输出,发现
@Environment(\.colorScheme) var mode
输出的结果是白天。
解决方案
根据参考资料了解到,可以使用onAppear内的代码解决该问题。
然后我在onAppear()中添加了判断颜色的代码,判定正常。
![](https://fangjunyu.com/wp-content/uploads/2024/06/3-3.png)
问题总结
本次问题的原因是我判断颜色的代码放到init()中,可能是因为初始化的流程太早了,导致并没有获取到真正的环境颜色变量,因此只提供了默认白天的颜色模式。
把判断颜色代码放到onAppear()中,判定生效,问题解决。
![](https://fangjunyu.com/wp-content/uploads/2024/06/4-2.png)
踩坑问题
当你使用onAppear时,发现环境变量输出正常,但是你的颜色并没有改变。这个问题可能是环境变量变化时,没有及时更新UIKit视图导致的。
我在写完这篇文章后,测试时发现,环境变量输出又存在问题了。
![](https://fangjunyu.com/wp-content/uploads/2024/06/5-2.png)
同一个代码,在我不添加if语句时,渲染存在问题。当我把if语句添加后,渲染输出正常。
![](https://fangjunyu.com/wp-content/uploads/2024/06/6-2.png)
这个问题还没有一个准绳,我在测试期间,删除if语句后,输出又正常了,好像是一个视图更新的BUG。有时输出正常,有时不正常。
这个问题不大时深入研究,如果遇到这个BUG,尝试增加if判断语句来实现视图的更新。
参考资料
Xcode 12, Swift 5.3: @Environment(\.colorScheme) Not Updating:https://stackoverflow.com/questions/64958492/xcode-12-swift-5-3-environment-colorscheme-not-updating