【问题标题】:Get update for light/dark mode theme change获取明暗模式主题更改的更新
【发布时间】:2019-11-21 15:24:07
【问题描述】:

我有一个 SwiftUI 应用程序,其中有一个 SpriteKit 场景。但是,在明暗模式之间切换时,在重新打开应用之前,场景背景不会改变颜色

这并不理想,所以我想在更改明暗模式外观时进行注册。我的资产中的颜色具有“任意”和“深色”两种外观。

UIViewRepresentable 结构中的updateUIView() 中的代码,它在与 SwiftUI 链接时设置场景:

scene.backgroundColor = UIColor(named: "Color.Scene")!
uiView.presentScene(scene)

我如何实现这一目标?我正在使用 iOS 13 的系统范围的暗模式,所以我不想要通知中心的解决方案,因为我要做的就是根据系统设置更新背景。

【问题讨论】:

  • 你能像这样在视图中使用@Environment (\.colorScheme) var colorScheme: ColorScheme,在正文中使用if self.colorScheme == .light { ... } else { ... }吗?视图将在更改时更新。
  • 那么如果配色方案发生变化,我如何让if 运行?
  • 它会自动执行,因为它被视为@State。如果您编辑问题并提供更多示例代码,我会尝试给您一个示例
  • @krjw 感谢您的帮助!环境变量修复了它。我将它放在持有我的UIViewRepresentable 的 SwiftUI 视图中。然后,在构造函数中,我设置场景的颜色,就像我在问题中显示的那样,因为主题是自动设置的。
  • @krjw 我也不需要使用colorScheme 变量,但是没有这个,它就行不通了。

标签: swift sprite-kit swiftui


【解决方案1】:

您可以在您的视图中使用@Environment (\.colorScheme) var colorScheme: ColorScheme 并使视图body 对其作出反应:

struct ContentView: View {
    @Environment (\.colorScheme) var colorScheme: ColorScheme

    var body: some View {
        HStack {
            if self.colorScheme == .light { 
                // draw for light mode
            } else { 
                // draw for dark mode
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2020-12-11
    • 1970-01-01
    • 2023-02-09
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2020-12-06
    相关资源
    最近更新 更多