You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 10:13:02