SwiftUI 是苹果公司推出的一个声明式 UI 框架,用于构建 macOS、iOS、watchOS 和 tvOS 应用程序。暗模式(Dark Mode)是一种界面显示模式,旨在减少屏幕亮度,降低眼睛疲劳,并且在某些情况下可以节省电池寿命。
在 SwiftUI 中,如果你发现无法更改暗模式,可能是以下几个原因:
@Environment
或 @EnvironmentObject
来响应系统主题的变化。以下是一些解决方法:
@Environment
响应系统主题import SwiftUI
struct ContentView: View {
@Environment(\.colorScheme) var colorScheme
var body: some View {
VStack {
Text("Current theme is \(colorScheme.rawValue)")
.foregroundColor(colorScheme == .dark ? .white : .black)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.previewDevice("iPhone 12")
.previewDisplayName("Light Mode")
.environment(\.colorScheme, .light)
ContentView()
.previewDevice("iPhone 12")
.previewDisplayName("Dark Mode")
.environment(\.colorScheme, .dark)
}
}
@EnvironmentObject
管理主题import SwiftUI
class ThemeManager: ObservableObject {
@Published var theme: Theme = .light
enum Theme {
case light
case dark
}
init() {
if #available(iOS 13.0, *) {
self.theme = UIColor.currentSystemTheme == .dark ? .dark : .light
}
}
}
struct ContentView: View {
@EnvironmentObject var themeManager: ThemeManager
var body: some View {
VStack {
Text("Current theme is \(themeManager.theme.rawValue)")
.foregroundColor(themeManager.theme == .dark ? .white : .black)
}
.background(themeManager.theme == .dark ? Color.black : Color.white)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.previewDevice("iPhone 12")
.previewDisplayName("Light Mode")
.environmentObject(ThemeManager())
ContentView()
.previewDevice("iPhone 12")
.previewDisplayName("Dark Mode")
.environment(\.colorScheme, .dark)
.environmentObject(ThemeManager())
}
}
暗模式适用于各种需要减少屏幕亮度、降低眼睛疲劳的应用场景,例如:
通过以上方法,你应该能够解决在 SwiftUI 中无法更改暗模式的问题。如果问题仍然存在,请确保你的开发环境和设备设置正确,并检查是否有其他代码覆盖了暗模式的设置。
领取专属 10元无门槛券
手把手带您无忧上云