2015-11-14 2 views
2

Так что у меня проблема с изображением элемента NSStatusBar, кажется, что изображение отходит от остальных пунктов меню. as you can see in this picture. Но когда строка меню неактивна (как в я на другом мониторе или нет в приложении) проблема не возникает as you can see in this picture. Я уверен, что мой код правильный.OSX Status Bar Размер изображения - 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"]]; 
} 

Я рассматривал этот вопрос: Display image in a cocoa status app, но проблема не исчезла, поэтому я не уверен, что еще делать, спасибо за любую помощь! PS: Проблема, о которой я думаю, это NSVariableStatusItemLength, я попробовал NSSquareStatusItemLength, но не повезло, попробовал установить его сам, но с той же проблемой, но с небольшим улучшением.

ответ

4

У меня также было несколько проблем при реализации хорошо выглядящего NSStatusItem, который отображается в строке меню.
Я получил лучшие результаты, когда следующие критерии были выполнены для пункта (и сопроводительной актива)

  • Статус изображение должно быть в формате PDF на основе
  • ... и используют суффикс «Template» (более об этом here)
  • собрании выше даст вам HiDPI поддержки и надлежащее предоставление для обоего легких & темных полосок меню
  • размер изображения должен быть установлен в (18,0, 18,0
  • )
  • чтобы получить Сэм е выделение, как по умолчанию OS X элементы в строке состояния, highlightMode должен быть и элемент должен иметь ассоциированный NSMenu

Этот фрагмент кода даст вам базовое приложение с красивой глядя NSStatusItem в главном меню системы (я использовал систему при условии, изображение здесь, но вы можете получить те же результаты с пользовательской 18x18 PDF с «Шаблон» суффикс имени):

@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

ваш ответ гораздо лучше, но оказалось, что другой ответ мой вопрос состоял в том, чтобы избавиться от таймера, который контролировал строку состояния, поскольку у меня было на таймере, чтобы проверить, изменилось ли меню но все равно спасибо! Не имел понятия, что мне пришлось использовать pdf! –