获取明暗模式主题更改的更新
Posted
技术标签:
【中文标题】获取明暗模式主题更改的更新【英文标题】: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
变量,但是没有这个,它就行不通了。
【参考方案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
【讨论】:
以上是关于获取明暗模式主题更改的更新的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 Material-UI AppBar 的明暗主题颜色?
Flutter:如何在 Flutter 中使用 Switch 更改主题 - 我已经使用 Provider 实现了这个明暗主题,但不能使用 switch 更改
Jetpack Compose:如何以编程方式将主题从浅色模式更改为深色模式 onClick