【问题标题】:NSStatusItem is oversized and invisible unless clickedNSStatusItem 过大且不可见,除非单击
【发布时间】:2017-04-21 00:17:49
【问题描述】:

我正在使用 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" : "bulb@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

和白色图标

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

我真的不知道发生了什么。我一直使用Apple Docs 作为参考。但我显然遗漏了一些东西。

有什么帮助吗?

【问题讨论】:

  • 重新检查图标大小。
  • 用截图检查和更新问题。它们是规定的尺寸
  • 请检查您的白色 2x 图标实际上是 32x32,因为从屏幕截图中我觉得大小不同。

标签: objective-c macos cocoa nsstatusitem


【解决方案1】:

两个建议:

  • 由于您的图标是方形的,请使用NSSquareStatusItemLength 创建状态栏
  • 使用模板图片:

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

    并删除该行以设置备用图像。操作系统管理正常/深色外观。

【讨论】:

  • 更改为NSSquareStatusItemLength 修复了宽度问题。你是什​​么意思改变灯泡到bulgTemplate?更改图标的名称?资产文件?或者只是调用图像[NSImage imageNamed:@"bulbTemplate"];
  • 对不起,我的错。还是比较简单,我更新了答案。
  • 嗯,现在在深色或浅色模式下都不会显示任何图标。
  • 您是否已将图像重命名为...Template?如果是,请还原此内容。并阅读 Sulthan 的评论。我同意倒置的图像似乎不是 16x16 和 32x32。
  • 不,图片仍然命名为bulb.png
猜你喜欢
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多