Dark Mode

Bonjour,
La couleur des éléments texte de mon interface ne change pas en fonction du "mode d'apparence", clair ou sombre.
J'ai pourtant défini mes couleurs "Any/Dark" dans Assets.xcassets (que j'ai nommé "AccentColor") et modifié les couleurs de tous mes éléments en choisissant AccentColor dans l'interface de Xcode. Mais l'apparence de mon interface ne bouge pas du tout en fonction du mode choisi par l'utilisateur.
Faut-il faire autre chose? J'ai vu que certains développeurs modifient les couleurs au sein de leur code. Bien que cette façon de faire me semble être un boulot énorme, j'ai tenté le coup sur un label mais sa couleur ne change pas quand on change le mode d'apparence. Qu'est-ce qui m'échappe?
Quelqu'un aurait-il le code d'une petite application d'exemple?
Réponses
Le dark mode c'est simple:
NSColor
et oublierCGColor
si tu veux quelque chose de simple.NSColor. labelColor
est une couleur employée par défaut pour les textes et qui va s'adapter automatiquement sans que tu aies à lever le petit doigt.AccentColor c'est différent. Depuis des lustres tu peux choisir la couleur d'accentuation dans macOS, bleue par défaut. Depuis BigSur tu as une nouvelle option: Multicolore qui applique une teinte bleue par défaut sauf pour les applications qui ont déclaré une AccentColor. Un exemple avec Sketch :
Je ne pense pas qu'utiliser AccentColor partout est forcement ce que tu cherche à faire.
Pour qu'on t'aide il va falloir nous montrer des trucs. Parce que normalement le dark mode c'est gratos, y'a rien à faire 😉
OK, alors le terme AccentColor n'était peut-être pas judicieusement choisi.




J'ai changé en MaCouleur
Voici ce que j'ai fait:
Comme on peut le voir, "Valeur 1" reste noir quelque soit le mode d'apparence.
Si tu choisi Label Color ça marche ? J'imagine que non vu la gueule du textfield en dessous, lui aussi est rendu en Aqua.
Une des causes probables: l'option Appearance respective de chaque vue de la hiérarchie doit être configurée comme tel:

En passant ton système en dark ça sera plus facile de repérer ce qui va pas dans Interface Builder. Dans cet exemple on comprend vite que le soucis se place entre la

NSBox
et son contenu:Un appui forcé sur une vue (trackpad obligatoire pour le coup) te montre la hiérarchie:

Et comme de fait j'ai modifié l'Appearance de la content view de la
NSBox
. Tu dois avoir un truc du genre qui traîne parce que ton fond de fenêtre s'adapte correctement. Peut-être la content view de taNSTabView
...Oublie ta couleur custom aussi, utilise
NSColor.labelColor
c'est fait pour 😉PS: Sinon t'es sûr pour la fonte ? Les best practices préconisent de rester sur la fonte système et c'est généralement ce qu'attendent les utilisateurs.
En effet, ça ne fonctionne pas non plus.
Qu'est-ce que tu appelles "chaque vue de la hiérarchie"? Je n'obtiens cette option que si je clique sur la fenêtre de mon application. Et c'est bien positionné sur "Inherited (System, Dark Aqua)"
Je n'ai pas de NSBox, j'ai placé mes éléments directement dans ma fenêtre.
Qu'est-ce que tu appelles un "appui forcé"? J'ai tout tenté avec mon trackpad mais je n'ai jamais réussi à obtenir ceci.
Je n'ai pas de NSTabView.
J'ai essayé "Regular" mais cela ne change rien.
Appui forcé c'est quand tu appuie sur trackpad, que tu sens le click et que tu appuie plus fort jusqu'à ce que tu sente un second click. Comme pour Quick View dans le Finder. Faut pas traverser la table non plus si ça marche pas avec une pression ferme c'est peut-être désactivé.
Il n'y a effectivement pas de
NSTabView
mais uneNSBox
j'ai confondu les icônes 😬.Le plus simple pour vérifier l'Appearance de tes vues c'est de passer directement par le Document Outline et de les faire une par une:
Idéalement tu les fais toutes histoire d'être sûr. Et vérifie si tu change pas l'apparence dans le code directement mais tu t'en souviendrai je pense.
Pour la fonte c'est très étrange que System Regular ne change pas la police du texte. Tu l'as bien changé sur la vue et pas la cell ?
Impeccable! Merci beaucoup.
En fait, j'avais mis mes labels et textfields dans des NSBox, j'avais complètement oublié. Et effectivement l'apparence des box était réglée sur "Aqua".
Ouf, je commence à piger, encore merci
Bonne nouvelle !
Mais de rien !
Par contre j'ai l'impression que tu utilise des
NSBox
pour grouper les éléments graphiques. On faisait ça dans le temps, maintenant on utilise desNSStackView
. Xcode t'aide à le faire d'ailleurs :Ha ok, effectivement je n'avais pas programmé depuis 2011...
Je vais voir cela, je te remercie.