Программно определять темный режим в SwiftUI для отображения соответствующего изображения
В Assets.xcassets
, есть возможность добавлять дополнительные изображения, которые будут автоматически переключаться в зависимости от внешнего вида. Это хорошо работает для статических изображений, но я пытаюсь выяснить, как это сделать для загруженных изображений.
Есть ли способ установить версию темного режима Image
при инициализации или в SwiftUI есть функция, которая позволит вам определить, является ли текущее изображение темным, чтобы можно было обслуживать другой URL-адрес изображения?
4 ответа
Вы можете использовать @Environment(\.colorScheme) var colorScheme: ColorScheme
в любом представлении, чтобы узнать, находится ли устройство в темном режиме (.dark
) или легкий режим (.light
). Используя эту информацию, вы можете условно решить, какое изображение легко показать с помощью троичного оператора.
Например, если у вас есть изображение с именем "lightImage" для светлого режима и "darkImage" для темного режима:
@Environment(\.colorScheme) var colorScheme: ColorScheme
var body: some View {
Button(action: {
foo()
}) {
Image(colorScheme == .light ? "lightImage" : "darkImage")
}
}
Как обнаружить темный режим
struct ContentView: View {
@Environment(\.colorScheme) var colorScheme
var body: some View {
Text(colorScheme == .dark ? "In dark mode" : "In light mode")
}
}
Источник: https://www.hackingwithswift.com/quick-start/swiftui/how-to-detect-dark-mode .
Там есть @Environment
переменная.
@Environment (\.colorScheme) var colorScheme:ColorScheme
Вот как я использую его, чтобы заполнить пустой прямоугольник:
Rectangle().fill(Color.fillColor(for: colorScheme))
В XCode 13:
@SwiftUI.Environment (\.colorScheme) var colorScheme:ColorScheme