Программно определять темный режим в 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
Другие вопросы по тегам