我有一个问题,我怎么能忽略或遵循iPadOs的配色方案?我在网上找遍了,找不到一个可以帮助我的答案。
我的期望:
我创建了一个选择器来选择“忽略系统方案”或“遵循系统方案”。如果用户选项卡上的“忽略系统方案”的应用程序应该有自己的配色方案,不应该遵循设备的配色方案(例如:**设备配色:**深色·**应用配色:**浅色)。
我所尝试的
我已经创建了一个AppStorage属性来检查和更改应用程序的颜色方案之间的黑暗和光明。我是否也应该调用“忽略系统方案”功能?
下面是我的代码:
import SwiftUI
struct SLDarkmodeSettingsView: View {
@Environment(\.colorScheme) var colorScheme
@AppStorage("isDarkMode") private var isDarkMode = false
@State private var darkmodePicker = 0
var body: some View {
NavigationStack {
List {
Section() {
HStack {
Toggle(isOn: $isDarkMode) {
Text("Enable Darkmode")
}
.alert(isPresented: $isDarkMode) {
Alert(title: Text("Warning"), message: Text("Do you really want to enable Darkmode (beta)? Some modules are not adapted to darkmode."), primaryButton: .default(Text("Cancel"), action: {
isDarkMode = false
}), secondaryButton: .destructive(Text("Enable").fontWeight(.semibold), action: {
// TODO: Call the darkmode func
isDarkMode = true
}))
}
}
HStack {
// TODO: Link toggle and picker, add darkmode support in v.1.2
Picker(selection: $darkmodePicker, label: Text("Display mode")) {
Text("Ignore system scheme").tag(0)
Text("Follow system scheme").tag(1)
}
}
} header: {
Text("Darkmode settings")
} footer: {
Text("Toggle the button to enable Darkmode. Note if your system is on a light scheme and you've selected Follow system scheme the darkmode setting will be ignored. Please select 'Ignore system scheme'.")
}
}
.navigationTitle("Darkmode (BETA)")
.navigationBarTitleDisplayMode(.inline)
}
}
}
#Preview {
SLDarkmodeSettingsView()
}
你能帮我看看我的方法是否正确吗?我说的对吗您的帮助将不胜感激!🙂
1条答案
按热度按时间zdwk9cvp1#
这可以通过将
Info.plist
中的以下键值对设置为“禁用”系统配色方案来实现。一旦你设置了它,这样应用程序就会忽略设备设置的主题,下一步就是设置一种处理交换该主题的方法。你可以在你的基本视图上使用
.environment(\.colorScheme, .light)
视图修改器来设置这个值。例如这应该具有关于环境对象的
YourMainLaunchView()
的所有子视图的效果。但是你应该知道这是一个单向绑定。因此,简单地更改它,而不以某种方式刷新视图,将导致在重新计算视图之前没有任何更改。您可能希望观察该值的变化,并处理它发生变化但没有像您期望的那样立即更新的情况。一个简单的解决方案是将customColorScheme
替换为@State
对象或@EnvironmentObject
,然后在.environment(...)
修改器中替换。当你努力实现它时,它会变得显而易见。