如何使用 SwiftUI 将应用程序采用到 iOS 13 暗模式?
Posted
技术标签:
【中文标题】如何使用 SwiftUI 将应用程序采用到 iOS 13 暗模式?【英文标题】:How can I adopt apps to iOS 13 Dark mode using SwiftUI? 【发布时间】:2019-08-28 21:45:17 【问题描述】:当我没有设置foregroundColor 时,SwiftUI 会在Environment 改变时自动将我的对象颜色转换为Dark Mode。但是,当我设置foregroundColor时,例如:
Text("Jason Parker")
.foregroundColor(Color.black)
SwiftUI 将不再改变对象的颜色。我听说 UIColor 中有系统颜色,但 SwiftUI 的颜色不包含这些变量。如何使用 SwiftUI 将应用程序采用到 ios 13 Dark 模式?
【问题讨论】:
【参考方案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))
现在,显然这是一个简化的配色方案,但你应该明白了。
【讨论】:
【参考方案2】:你可以强制你的应用只使用暗模式设置
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()
【讨论】:
以上是关于如何使用 SwiftUI 将应用程序采用到 iOS 13 暗模式?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中使用 Swift/SwiftUI 将我从应用数据导出的文本文件移动到应用沙箱之外的位置?