SwiftUI 以编程方式更改颜色主题

Posted

技术标签:

【中文标题】SwiftUI 以编程方式更改颜色主题【英文标题】:SwiftUI Change color theme programmatically 【发布时间】:2019-11-13 15:15:49 【问题描述】:

我有 .light 和 .dark 主题。

在预览 (MyContainer_Previews) 中,我可以通过以下方式更改它们:

ForEach([.light,.dark], id: \.self)  theme in

            Group 
                ...
             
            .environment(\.colorScheme, theme) //This line
        
 ...

如何动态更改应用主题(例如按钮操作)。 我尝试在 SceneDelegate 中更改它:

 let contentView = ContentView()
 contentView.environment(\.colorScheme, .dark) //Not work

【问题讨论】:

方案不是iPhone用户控制的吗? 我需要覆盖它。如果用户想要总是黑暗或光明。 我已经回答了你的问题 【参考方案1】:

反应性:

    return NavigationView 
        VStack(alignment: .trailing, spacing: 0) 
            ...
        

     
    .environment(\.colorScheme, appState.options.theme == .light ? .light : .dark)

【讨论】:

如果我不希望我的视图位于导航视图内怎么办?【参考方案2】:

有人告诉我,如果您将代码放在 NavagationView 中,您可以使用您的enviorment 更改方案。

var body: some View 


NavigationView
   //Your view here

let contentView = ContentView() contentView.environment(\.colorScheme, .dark) //works now

  UIHostingController(rootView: ContentView().environment(\.colorScheme, .light)

  struct ContentView: View 
var body: some View 
   NavigationView
       Text("!")
    

【讨论】:

以上是关于SwiftUI 以编程方式更改颜色主题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SwiftUI 更改主题颜色?

以编程方式更改软键盘中候选视图的颜色

如何以编程方式更改 swiftUI DatePicker 的选定值

SwiftUI:创建自己的 TextField 并以编程方式更改内容

Windows 10 UAP 更改颜色主题

如何以正确的方式在 SwiftUI 中使用颜色? (特别适用于具有 Light 和 DarkMode 的应用程序)