Xcode报错:Accessing Environment‘s value outside of being installed on a View. This will always read the default value and will not update.
Xcode报错:Accessing Environment‘s value outside of being installed on a View. This will always read the default value and will not update.

Xcode报错:Accessing Environment‘s value outside of being installed on a View. This will always read the default value and will not update.

情景复现

在调试“存钱猪猪”应用时,发现夜晚模式存在问题无法识别的问题。

报错截图

导致应用在夜晚模式下,图标是黑色的,看不到底部导航的文字和图标内容。

经过调试输出,发现

@Environment(\.colorScheme) var mode

输出的结果是白天。

解决方案

根据参考资料了解到,可以使用onAppear内的代码解决该问题。

然后我在onAppear()中添加了判断颜色的代码,判定正常。

问题总结

本次问题的原因是我判断颜色的代码放到init()中,可能是因为初始化的流程太早了,导致并没有获取到真正的环境颜色变量,因此只提供了默认白天的颜色模式。

把判断颜色代码放到onAppear()中,判定生效,问题解决。

踩坑问题

当你使用onAppear时,发现环境变量输出正常,但是你的颜色并没有改变。这个问题可能是环境变量变化时,没有及时更新UIKit视图导致的。

我在写完这篇文章后,测试时发现,环境变量输出又存在问题了。

同一个代码,在我不添加if语句时,渲染存在问题。当我把if语句添加后,渲染输出正常。

这个问题还没有一个准绳,我在测试期间,删除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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注