Lorsque je fixe l'arrière-plan de mon indicateur de progression sur le vert, cela fonctionne comme prévu.
code strong>: p> résultat : p> mais lorsque je réglais la couleur d'arrière-plan sur blanc, la couleur d'arrière-plan reste grise (au lieu de passer au blanc ). P> loadingIndicator.wantsLayer = true
loadingIndicator.layer?.backgroundColor = NSColor.whiteColor().CGColor
4 Réponses :
J'ai trouvé un moyen de résoudre ce problème. La calayeuse du NSProgressIndicator a une sous-couche qui montre la couleur de fond teintée que vous voyez. Cacher cette sous-couche ne fera aucune idée de ne jamais être montrée et gardez la spinner visible.
CALayer *layer = [[self popoverProgressIndicator] layer]; CALayer *backgroundLayer = [[layer sublayers] firstObject]; [backgroundLayer setHidden:YES];
Cela fonctionne pour moi sur Macos Catalina, mais seulement après Nsprogressindicator code> a été montré. Même
ViewDidIDAppear code> est trop tôt pour moi.
J'ai eu le même problème lorsque j'utilise Nsprogressindicator à l'intérieur NSPOPOVER.
Ma solution consistait à définir l'apparence sur Popant comme ci-dessous. P>
popover.appearance = NSAppearance(named: NSAppearanceNameAqua)
Je ne sais pas pourquoi cela se produit, mais après avoir défini la propriété, j'ai eu la couleur de fond blanc correcte. p>
Capture d'écran: Fond blanc Progrès à l'intérieur Popover P> P>
J'ai également rencontré ce problème récemment, mais la mienne était liée au mode sombre / mode lumière dans MacOS 10.14. Il semble que l'utilisation d'un NSPROGRESSIndicator à l'intérieur d'un NSPOPOVER, car d'autres personnes ont mentionné, mais également à l'intérieur d'une Popover d'extension de l'application Safari (je pense que c'est parce que le Safari Popover est également un NSPOPOVER que vous ne pouvez pas accéder directement). Comme Horimislime mentionné, décoller avec l'apparence semble réparer les choses.
J'ai créé une sous-classe NSProgressIndicator qui, Ce n'est que lorsque l'application est exécutée dans MacOS 10.14 ou plus, définit automatiquement sa propre apparition sur celle du système, même si cela change pendant l'exécution de l'application. L'indicateur de progression fonctionne pour moi dans les versions précédentes du système d'exploitation. Je l'ai donc laissé inchangé si le système est inférieur à 10.14. P>
Voici le code: p>
import Cocoa class TransparentProgressIndicator: NSProgressIndicator { override func awakeFromNib() { super.awakeFromNib() if #available(OSX 10.14, *) { // register an observer to detect when the system appearance changes UserDefaults.standard.addObserver(self, forKeyPath: "AppleInterfaceStyle", options: .new, context: nil) // set the starting appearance to the one the system has let light = NSAppearance(named: .aqua) let dark = NSAppearance(named: .darkAqua) self.appearance = UserDefaults.standard.string(forKey: "AppleInterfaceStyle") == "Dark" ? dark : light } } override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if #available(OSX 10.14, *) { if keyPath == "AppleInterfaceStyle" { // set the current appearance to the one the system has let val: String? = change?[NSKeyValueChangeKey.newKey] as? String if (val == "Dark") { self.appearance = NSAppearance(named: .darkAqua) } else { self.appearance = NSAppearance(named: .aqua) } } } } deinit { if #available(OSX 10.14, *) { UserDefaults.standard.removeObserver(self, forKeyPath: "AppleInterfaceStyle") } } }
J'ai eu le même problème lorsque j'utilise Ma solution consistait à définir l'apparence sur le Si vous préférez que vous puissiez résoudre le problème même dans l'apparition de l'ensemble de la popover: P> nsprogressindicator code> intérieur
nspopover code>.
nsprogressindicator code> comme ci-dessous. p>
popover.appearance = NSAppearance(named: .aqua)
Toute solution à ce sujet, ayant le même problème avec indicateur de Popover