如何使用SwiftUI将应用程序采用iOS 13 Dark模式?

时间:2019-08-28 21:45:17

标签: ios swift xcode swiftui

当我不设置前景色时,当环境改变时,SwiftUI会自动将我对象的颜色设为暗模式。但是,当我设置前景色时,例如:

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

SwiftUI将不再更改对象的颜色。我听说UIColor中有系统颜色,但是SwiftUI的颜色不包含这些变量。如何使用SwiftUI将应用程序采用iOS 13 Dark模式?

2 个答案:

答案 0 :(得分:1)

这就是我的方法。首先,如果您希望使用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))

现在,显然这是一种简化的配色方案,但是您应该明白这一点。

答案 1 :(得分: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()
    }
}