SwiftUI Preview 中的深色模式在 Xcode 11.4 中没有深色背景

Lup*_*rus 6 xcode swiftui

有没有人有同样的问题,Xcode (11.4) 在深色模式下预览时不显示深色背景?

重现步骤:

1)新建一个项目,一个 Single View App

2) 将.environment-modifier添加到预览中:

Group {
    ContentView()
        .environment(\.colorScheme, .light)
    ContentView()
        .environment(\.colorScheme, .dark)
}
Run Code Online (Sandbox Code Playgroud)

你得到这个结果:

Xcode 预览

Aus*_*lon 17

环境\.colorScheme中的设置已弃用,因此请改用.preferedColorScheme修饰符。例如,

ContentView()
    .preferredColorScheme(.dark)
Run Code Online (Sandbox Code Playgroud)

  • 我以前怎么没见过这个?我刚刚完成了一堆实现我自己的自定义函数的效果,用于向视图添加黑暗模式。 (2认同)

Chr*_*ris -1

尝试这个:

@available(iOS 13.0, *)
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
            }
        }
    }
}

@available(iOS 13.0, *)
extension View {
    @available(iOS 13.0, *)
    public func darkModeFix(_ on: Bool = true) -> DarkView<Self> {
        DarkView(on) {
            self
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

进而

yourView()
.environment(\.colorScheme, .dark)
                    .darkModeFix()
Run Code Online (Sandbox Code Playgroud)