ios 是否有办法覆盖WidgetKit的主题,以便我们可以在WidgetKit中检索正确的命名颜色?

uqcuzwp8  于 2022-12-24  发布在  iOS
关注(0)|答案(1)|浏览(91)

在主应用程序中,我可以根据用户偏好覆盖暗/亮主题,这样我就可以根据命名的颜色检索正确的颜色信息。

if (user preference) {
    overrideUserInterfaceStyle = .light
} else {
    overrideUserInterfaceStyle = .dark
}

// Dark theme/ light theme automatic aware color.
SwiftUI.Color("purpleColor")

但是,如何重写WidgetKit的主题,以便WidgetKit能够正确地解释命名颜色?
我知道在WidgetKit中,我可以使用@Environment(\.colorScheme)读取当前系统范围的主题设置。
但是,这不是我想要的。
我希望能够覆盖主题的WidgetKit的基础上,用户的喜好,然后能够检索正确的命名颜色。
谢谢。

dtcbnfnu

dtcbnfnu1#

您可以逐个视图覆盖.colorScheme。最简单的方法是使用三进制并将新的.colorScheme注入到视图中。如果要更改设备.colorScheme,请使用.preferredColorScheme

struct ColorSchemeView: View {
    
    @State var deviceIsDark = false
    @State var viewIsDark = false

    var body: some View {
        VStack {
            Color.purple
                .overlay(
                Text("Change Device ColorScheme")
                )
                .preferredColorScheme(deviceIsDark ? .dark : .light)
                .onTapGesture {
                    deviceIsDark.toggle()
                }
            
            Color.purple
                .overlay(
                Text("Change View ColorScheme")
                )
                .environment(\.colorScheme, viewIsDark ? .dark : .light)
                .onTapGesture {
                    viewIsDark.toggle()
                }
        }
    }
}

哦,而且没有必要使用SwiftUI。这将是假设的。

相关问题