无法使用 SwiftUI 实现暗模式 [重复]
Posted
技术标签:
【中文标题】无法使用 SwiftUI 实现暗模式 [重复]【英文标题】:Not able to achieve dark mode using SwiftUI [duplicate] 【发布时间】:2019-06-14 05:06:41 【问题描述】:struct ContentView_Previews : PreviewProvider
static var previews: some View
ContentView().environment(\.colorScheme, .dark)
我正在使用上面的代码在我的演示项目中实现暗模式,但它不起作用。非常感谢任何帮助或见解。
【问题讨论】:
您在项目中使用了正确的颜色?调试器中的开关是否工作? 是的@Lu_,在调试器中工作 这能回答你的问题吗? Dark mode in SwiftUI Preview doesn't have a dark background with Xcode 11.4 【参考方案1】:这似乎是 Xcode 11.0 beta 中的一个错误。临时解决方法是将您的内容包装在 NavigationView
中。
例如,以下代码在深色模式预览中不会生效:
var body: some View
Text("Hello World")
但是在将内容包装在 NavigationView
中之后,暗模式预览会按预期工作:
var body: some View
NavigationView
Text("Hello World")
结果:
【讨论】:
这在 Xcode 11.3 中仍然是一个问题。 在 Xcode 11.5 中仍然是一个问题 Xcode 11.7 上也是这样【参考方案2】:深色模式在预览中工作了一半,只是忘记绘制背景。
以下解决方法允许您在预览功能中将.darkModeFix()
添加到ContentView()
。您可以选择添加false
作为参数来关闭暗模式。
struct ContentView_Previews : PreviewProvider
static var previews: some View
Group
ContentView()
.darkModeFix()
只需在项目中的某处添加以下内容:
public struct DarkView<Content> : View where Content : View
var darkContent: Content
var on: Bool
public init(_ on: Bool, @ViewBuilder content: () -> Content)
self.darkContent = content()
self.on = on
public var body: some View
ZStack
if on
Spacer()
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
.background(Color.black)
.edgesIgnoringSafeArea(.all)
darkContent.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity).background(Color.black).colorScheme(.dark)
else
darkContent
extension View
public func darkModeFix(_ on: Bool = true) -> DarkView<Self>
DarkView(on)
self
【讨论】:
【参考方案3】:它修复了预览,但没有改变我的代码
import SwiftUI
struct ContentView: View
var body: some View
Text("Hello, World!")
struct ContentView_Previews: PreviewProvider
static var previews: some View
Group
ZStack
Color.black.edgesIgnoringSafeArea(.all)
ContentView().environment(\.colorScheme, .dark)
ContentView().environment(\.colorScheme, .light)
【讨论】:
【参考方案4】:显然是一个错误。即使做MyView().colorScheme(.dark)
也不行。
右键单击(右键单击或按住 Ctrl 键单击)“播放”按钮(用于模拟运行应用程序)。单击调试预览。打开调试区域。然后,您可以使用 Enviroment Overrides 来配置暗/亮模式、动态类型、可访问性设置等。
顺便说一句,要打开 Enviroment Overrides 设置,请转到调试器上方并按此按钮:
【讨论】:
以上是关于无法使用 SwiftUI 实现暗模式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章