24 votes

Détection programmatique du mode sombre dans SwiftUI pour afficher l'image appropriée

Sur Assets.xcassets Il est possible d'ajouter des images supplémentaires qui changeront automatiquement en fonction des apparences. Cela fonctionne bien pour les images statiques, mais j'essaie de trouver 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'une Image on init ou existe-t-il une fonction dans SwiftUI qui vous permettra de détecter si l'apparence actuelle est sombre afin qu'une image URL différente puisse être servie ?

57voto

RPatel99 Points 149

Vous pouvez utiliser @Environment(\.colorScheme) var colorScheme: ColorScheme dans n'importe quelle vue pour savoir si l'appareil est en mode sombre ( .dark ) ou le mode lumière ( .light ). À l'aide de ces informations, vous pouvez décider conditionnellement de l'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 foncé :

@Environment(\.colorScheme) var colorScheme: ColorScheme

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

3voto

dfd Points 5035

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))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X