8
votes

Nsprogressindicator ne peut pas régler la couleur d'arrière-plan sur blanc

Lorsque je fixe l'arrière-plan de mon indicateur de progression sur le vert, cela fonctionne comme prévu.

code strong>: p> xxx pré>

résultat : p>

 Entrez la description de l'image ici 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>

CODE STRT>: P>

loadingIndicator.wantsLayer = true
loadingIndicator.layer?.backgroundColor = NSColor.whiteColor().CGColor


1 commentaires

Toute solution à ce sujet, ayant le même problème avec indicateur de Popover


4 Réponses :


4
votes

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];


1 commentaires

Cela fonctionne pour moi sur Macos Catalina, mais seulement après Nsprogressindicator a été montré. Même ViewDidIDAppear est trop tôt pour moi.



5
votes

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)
  • essayé sur OSX 10.11.5 / XCode7.3.1 Li>
  • Tout autre nom sauf pour NsappearancenameVibrantdark a également travaillé LI> ul>

    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>


0 commentaires

2
votes

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

}


0 commentaires

1
votes

J'ai eu le même problème lorsque j'utilise nsprogressindicator code> intérieur nspopover code>.

Ma solution consistait à définir l'apparence sur le nsprogressindicator code> comme ci-dessous. p> xxx pré>

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>

popover.appearance = NSAppearance(named: .aqua)


0 commentaires