如何使用SwiftUI将应用适配到iOS 13的暗黑模式?

4

如果我不设置foregroundColor属性,当环境改变时,SwiftUI会自动将我的对象颜色调整为暗模式。然而,如果我设置了foregroundColor属性,例如:

Text("Jason Parker")
    .foregroundColor(Color.black)

SwiftUI将不再更改对象的颜色。我听说UIColor中有系统颜色,但是SwiftUI的Color不包括这些变量。我该如何使用SwiftUI来适应iOS 13的深色模式?

2个回答

2
这是我的做法。首先,如果你想使用UIColor语义,你可以在...是beta 5吗?
Color(color: Color(UIColor.systemBackground)

但如果您想为自己的应用程序设置自定义颜色,您需要利用colorScheme
@Environment (\.colorScheme) var colorScheme:ColorScheme

有几种使用方法,我可能会使用Color扩展名:最初的回答
extension Color {
    static let yellow = Color.yellow
    static let darkGrey = Color.init(UIColor.darkGray)

    static func backgroundColor(for colorScheme: ColorScheme) -> Color {
        if colorScheme == .dark {
            return yellow
        } else {
            return darkGrey
        }
    }
}

最初的回答

并且像这样使用它:

Text(""Hello world!").background(Color.backgroundColor(for: colorScheme))

现在,显然这是一个简化的颜色方案,但你应该能够理解。最初的回答。

0

你可以强制你的应用程序仅使用暗模式设置

window.overrideUserInterfaceStyle = .dark

在你的SceneDelegate.swift文件中:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    let contentView = LoginView()

    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.overrideUserInterfaceStyle = .dark
        window.rootViewController = UIHostingController(rootView: contentView)
        self.window = window
        window.makeKeyAndVisible()
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接