SwiftUI适配明暗模式的颜色在预览、模拟器及真机中均不更新的问题求助
SwiftUI适配明暗模式的颜色在预览、模拟器及真机中均不更新的问题求助
我正在做一个SwiftUI测试项目,核心需求是根据系统的明暗模式自动调整颜色。
我已经在资源目录里配置了theme.colorset,给浅色和深色环境分别设置了对应的颜色,本来是想用来测试颜色的适配效果的。(附theme.colorset的配置界面截图,已正确设置两种模式下的不同颜色)
但现在遇到了一个头疼的问题:不管是在预览画布、模拟器,还是切换到深色模式的真机上,我的代码好像都只读取浅色模式的颜色,完全不跟着系统模式变化。
我一开始以为是缓存的问题,已经尝试清除缓存了,但问题还是没解决。(附SwiftUI预览界面截图,浅色和深色模式预览显示的都是浅色模式的颜色效果)
下面是我简化后的测试代码:
struct ContentView: View { private var baseColor: Color = .theme var body: some View { LuminanceVStack(baseColor: baseColor, incrementPercentage: 5) } } struct LuminanceVStack: View { var baseColor: Color var incrementPercentage: Double var body: some View { VStack(spacing: 0) { let stepCount = Int(100.0 / incrementPercentage) + 1 ForEach(0..<stepCount, id: \.self) { i in let luminance = Double(i) * (incrementPercentage / 100.0) Rectangle() .fill(adjustLuminance(baseColor: baseColor, luminance: luminance)) } } } private func adjustLuminance(baseColor: Color, luminance: Double) -> Color { let uiColor = UIColor(baseColor) var hue: CGFloat = 0 var saturation: CGFloat = 0 var brightness: CGFloat = 0 var opacity: CGFloat = 0 uiColor.getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &opacity) return Color( uiColor: UIColor( hue: hue, saturation: saturation, brightness: max(min(luminance, 1.0), 0.0), alpha: opacity ) ) } }
我还录了一段演示视频,能看到模拟器切换明暗环境,但颜色完全没有更新的情况。
我已经尝试过的方法
- 重置预览画布:以为是预览缓存的问题,重置了画布,但没有效果
- 模拟器测试:手动将模拟器设置为深色模式,依然只显示浅色模式的颜色
- 真机测试:在物理设备上切换到深色模式,问题依旧存在
我的疑问
为什么系统的明暗模式设置完全被忽略了?有没有办法让颜色根据当前激活的模式正常调整?如果有排查思路或者解决办法的话,麻烦各位大佬指点一下,非常感谢!
备注:内容来源于stack exchange,提问作者markb
相关产品推荐
相关产品推荐

