NSStatusItem негабаритен и невидим, если не щелкнуть

Я работаю над приложением, используя NSStatusItem.

У меня две проблемы: 1 значок отсутствует в невыбранном состоянии,

введите здесь описание изображения

Однако, когда вы щелкаете там, где должен быть значок, приложение появляется, но область большая. Тот же размер, что и меню.

введите здесь описание изображения

Вот как я создаю NSStatusItem и меню.

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    _statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
    _statusItem.title = @"";
    _statusItem.image = [NSImage imageNamed:@"bulb"];
    _statusItem.alternateImage = [NSImage imageNamed:@"bulb-alt"];
    _statusItem.highlightMode = YES;


    NSMenu *menu = [[NSMenu alloc] init];
    [menu addItemWithTitle:@"About App" action:@selector(openAboutThisImage:) keyEquivalent:@""];
    [menu addItem:[NSMenuItem separatorItem]]; // A thin grey line
    [menu addItemWithTitle:@"Start at Login" action:@selector(startAtLogin:) keyEquivalent:@""];
    [menu addItem:[NSMenuItem separatorItem]]; // A thin grey line
    [menu addItemWithTitle:@"Quit App" action:@selector(terminate:) keyEquivalent:@""];
    _statusItem.menu = menu;

}

У меня есть два набора иконок. Один белый и один черный. Каждый набор имеет два размера 16x16 и 32x32 (@2x).

Размеры иконок:

введите здесь описание изображения введите здесь описание изображения

введите здесь описание изображения введите здесь описание изображения

Белые одинаковые по размеру.

Актив JSON для ЧЕРНОЙ иконки

  {
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "bulb.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "[email protected]",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

и белый значок

{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "bulb-alt.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "[email protected]",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

Я действительно в недоумении от того, что происходит. Я использовал Apple Docs в качестве справки. Но я явно что-то упускаю.

Любая помощь?


person user-44651    schedule 20.04.2017    source источник
comment
Перепроверьте размеры значков.   -  person vadian    schedule 20.04.2017
comment
Проверенный и обновленный вопрос со скриншотами. Это заявленные размеры   -  person user-44651    schedule 20.04.2017
comment
Пожалуйста, проверьте, что ваш белый значок 2x на самом деле имеет размер 32x32, потому что по скриншотам мне кажется, что размер другой.   -  person Sulthan    schedule 20.04.2017


Ответы (1)


Два предложения:

  • Поскольку ваши значки квадратные, создайте строку состояния с помощью NSSquareStatusItemLength
  • Используйте изображение шаблона:

    NSImage *image = [NSImage imageNamed:@"bulb"];
    image.template = YES;
    _statusItem.image = image;
    

    И удалите строку, чтобы установить альтернативное изображение. ОС управляет нормальным/темным внешним видом.

person vadian    schedule 20.04.2017
comment
Изменение на NSSquareStatusItemLength устранило проблему с шириной. Что вы имеете в виду, замените лампочку на bulgTemplate? Изменить название иконок? Файлы ресурсов? или просто вызов изображения [NSImage imageNamed:@"bulbTemplate"]; - person user-44651; 20.04.2017
comment
Извини, я виноват. Это еще проще, я обновил ответ. - person vadian; 20.04.2017
comment
Хммм, теперь значки не отображаются ни в темном, ни в светлом режиме. - person user-44651; 20.04.2017
comment
Вы уже переименовали изображения в ...Template? Если да, верните это. И прочитайте комментарий Султана. Согласен, что перевернутые картинки вроде не 16х16 а 32х32. - person vadian; 20.04.2017
comment
Нет, изображение по-прежнему называется bulb.png - person user-44651; 20.04.2017
comment
Я забыл, что изображение шаблона должно быть черно-белым. Нет оттенков серого, нет цветов. Если вам нужны оттенки серого, вы не можете воспользоваться шаблоном шаблона. - person vadian; 20.04.2017
comment
Изображение черное и прозрачное. Должны ли прозрачные части быть белыми? - person user-44651; 20.04.2017
comment
Нет, они также могут быть прозрачными. Затем попробуйте другой способ, переименуйте актив с помощью bulbTemplate (суффикс Template имеет решающее значение), измените имя в imageNamed... и удалите строку image.template = YES; - person vadian; 20.04.2017
comment
Это ближе! Там, где должна быть иконка, теперь просто белое поле. - person user-44651; 20.04.2017