Изменение размера изображения строки состояния OSX - Какао

Итак, у меня проблема с изображением элемента NSStatusBar, похоже, что изображение отталкивается от остальных элементов меню , как вы можете видеть на этом рисунке. Но когда строка меню неактивна (например, я нахожусь на другом мониторе или не в приложении), проблемы не возникает как вы можете видеть на этом рисунке. Хотя я почти уверен, что мой код верен.

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

Я просматривал этот вопрос: Отображать изображение в приложении статуса какао, но проблема не устранена, поэтому я не знаю, что еще делать, спасибо за любую помощь! PS: Я думаю, проблема в NSVariableStatusItemLength, я пробовал NSSquareStatusItemLength, но безуспешно, также пытался установить его сам, но с той же проблемой, но с небольшим улучшением.


person Bolt Sandwich    schedule 14.11.2015    source источник


Ответы (1)


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

  • Изображение статуса должно быть в формате PDF.
  • ... и используйте суффикс "Шаблон" (подробнее об этом здесь)
  • Выполнение вышеуказанного даст вам поддержку HiDPI и правильный рендеринг как для светлых, так и для темных полос меню.
  • Размер изображения должен быть установлен на (18.0, 18.0).
  • Чтобы получить такую ​​же подсветку, как элементы OS X по умолчанию в строке состояния, highlightMode должен быть включен, а элемент должен иметь связанный NSMenu

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

@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
person Thomas Zoechling    schedule 14.11.2015
comment
ваш ответ намного лучше, но оказалось, что еще один ответ на мой вопрос заключался в том, чтобы просто избавиться от таймера, который управлял строкой состояния, так как у меня был таймер, чтобы проверить, изменился ли внешний вид строки меню, но в любом случае спасибо! Понятия не имел, что мне нужно было использовать pdf! - person Bolt Sandwich; 16.11.2015