web-dev-qa-db-fra.com

Détecter par programme le mode sombre dans SwiftUI pour afficher l'image appropriée

Dans Assets.xcassets, il est possible d'ajouter des images supplémentaires qui basculeront automatiquement en fonction des apparences. Cela fonctionne bien pour les images statiques, mais j'essaie de comprendre comment le faire pour les images téléchargées.

Image Set

Existe-t-il un moyen de définir la version en mode sombre d'un Image sur init ou y a-t-il une fonction dans SwiftUI qui vous permettra de détecter si l'apparence actuelle est sombre afin qu'une URL d'image différente puisse être servie?

9
Zain

Vous pouvez utiliser @Environment(\.colorScheme) var colorScheme: ColorScheme dans n'importe quelle vue pour savoir si l'appareil est en mode sombre (.dark) ou en mode lumière (.light). En utilisant ces informations, vous pouvez conditionnellement décider quelle image afficher facilement avec un opérateur ternaire.

Par exemple, si vous avez une image nommée "lightImage" pour le mode clair et "darkImage" pour le mode sombre:

@Environment(\.colorScheme) var colorScheme: ColorScheme

var body: some View {
    Button(action: {
        foo()
    }) {
        Image(colorScheme == .light ? "lightImage" : "darkImage")
    }
}
23
RPatel99

Il y a un @Environment variable.

@Environment (\.colorScheme) var colorScheme:ColorScheme

Voici comment je l'utilise pour remplir un rectangle vide:

Rectangle().fill(Color.fillColor(for: colorScheme))
2
dfd