D'accord. Je sais que cela ne devrait pas être sorcier. Je n'arrive pas à faire fonctionner le mode sombre et j'ai lu la documentation plusieurs fois. En espérant que quelqu'un puisse découvrir ce qui me manque.
J'ai une couleur nommée dans le catalogue d'actifs .
J'ai réglé mon mode plist pour qu'il soit en mode sombre pour un test plus facile.
Ma vue de contenu ressemble à ceci:
struct ContentView : View {
var body: some View {
VStack {
Text("Hello World")
Text("Yo yo yo")
.color(Color("darkModeColor"))
}
}
}
Peu importe ce que je fais, la couleur est TOUJOURS de l'apparence "N'importe" quand elle devrait prendre la couleur cyan.
Je sais que le mode sombre lui-même fonctionne parce que toutes les couleurs sémantiques du système fournissent par Apple fonctionne très bien car vous pouvez voir le texte "Hello World" changé en blanc.
Avez-vous des idées sur ce qui me manque ou quelqu'un d'autre rencontre-t-il ce problème avec Xcode 11 Beta 1?
Il s'agit probablement d'un bogue dans cette version bêta de Xcode 11. J'ai essayé la fonction de mode sombre dans une application UIKit et elle fonctionne parfaitement en utilisant UIColor
mais la même couleur ne fonctionnerait pas en utilisant Color
dans SwiftUI. Espérons que cela sera corrigé dans les prochaines versions.
Mise à jour: Ce problème a été résolu avec Xcode 11 beta.
Une solution de travail (mais assez verbeuse) que nous pouvons utiliser pour surmonter cette limitation actuelle consiste à étendre Color avec des méthodes paramétrées avec le jeu de couleurs actuel comme suit:
import SwiftUI
extension Color {
static let lightBackgroundColor = Color(white: 1.0)
static let darkBackgroundColor = Color(white: 0.0)
static func backgroundColor(for colorScheme: ColorScheme) -> Color {
if colorScheme == .dark {
return darkBackgroundColor
} else {
return lightBackgroundColor
}
}
}
Et dans les vues où vous devez accéder à ces couleurs, vous devez ajouter une propriété d'environnement pour le jeu de couleurs et l'utiliser pour récupérer la couleur dynamique:
import SwiftUI
struct ColoredView : View {
@Environment(\.colorScheme) var colorScheme: ColorScheme
var body: some View {
Rectangle().fill(Color.backgroundColor(for: self.colorScheme))
}
}
Ces couleurs définies dans le code fonctionnent pour les aperçus Xcode ainsi que pour le simulateur.