2015-11-14 1 views
2

Donc, j'ai un problème avec l'image d'un article NSStatusBar, il semble que l'image est loin du reste des éléments du menu as you can see in this picture. Mais quand la barre de menu est inactive (comme dans je suis sur mon autre moniteur ou pas dans l'application) le problème ne se produit pas as you can see in this picture. Je suis assez sûr que mon code est correct cependant.OSX Status Bar Taille de l'image - Cocoa

statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; 
[statusItem setHighlightMode:YES]; 
[statusItem setAction:@selector(openWindow)]; 
[statusItem setTarget:self]; 

if ([[[NSAppearance currentAppearance] name] containsString:NSAppearanceNameVibrantDark]) { 
    [statusItem setImage:[NSImage imageNamed:@"whiteMenu.png"]]; 
} else { 
    [statusItem setImage:[NSImage imageNamed:@"blackMenu.png"]]; 
} 

je considérais cette question: Display image in a cocoa status app mais le problème persiste, donc je ne suis pas sûr que faire d'autre, merci pour toute aide! PS: Le problème que je pense est le NSVariableStatusItemLength, j'ai essayé NSSquareStatusItemLength mais sans chance, a également essayé de le régler moi-même, mais avec le même problème, mais avec peu d'amélioration.

Répondre

4

J'ai également eu plusieurs problèmes lors de l'implémentation d'un beau NSStatusItem qui est affiché dans la barre de menu.
J'ai obtenu les meilleurs résultats lorsque les critères suivants ont été atteints pour l'élément (et l'actif d'accompagnement)

  • L'image de statut doit être PDF basé
  • ... et utiliser le suffixe « modèle » (plus à ce sujet here)
  • réunion ci-dessus vous donnera HiDPI un soutien et un rendu correct pour les deux & légères barres de menu sombres
  • la taille de l'image doit être réglée sur (18,0, 18,0)
  • pour gagner le sam e mettre en évidence par défaut OS éléments X dans la barre d'état, highlightMode doit être allumé et l'élément doit avoir un associé NSMenu

Cet extrait vous donnera une application de base avec une jolie NSStatusItem dans le menu principal du système (j'ai utilisé un système fourni image ici, mais vous pouvez obtenir les mêmes résultats avec un PDF 18x18 personnalisé avec un suffixe de nom « modèle »):

@interface AppDelegate() 

@property NSStatusItem* statusItem; 
@property (weak) IBOutlet NSMenu *statusMenu; 

@end 

@implementation AppDelegate 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    NSImage* statusImage = [NSImage imageNamed:NSImageNameActionTemplate]; 
    statusImage.size = NSMakeSize(18.0, 18.0); 
    self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength]; 
    self.statusItem.image = statusImage; 
    self.statusItem.highlightMode = YES; 
    self.statusItem.enabled = YES; 
    self.statusItem.menu = self.statusMenu; 
} 

- (void)applicationWillTerminate:(NSNotification *)aNotification { 
    // Insert code here to tear down your application 
} 

@end 
+0

votre réponse est beaucoup mieux, mais il est avéré qu'une autre réponse à Ma question était juste pour se débarrasser de la minuterie qui contrôlait la barre d'état, puisque je l'ai eu sur une minuterie pour vérifier si l'apparence de la barre de menu avait changé Mais merci quand même! Je n'avais pas la moindre idée que je devais utiliser un pdf! –