OSX状态栏图像大小 - 可可

时间:2015-11-14 00:51:04

标签: objective-c macos cocoa nsstatusitem nsstatusbar

所以我对NSStatusBar项目的图像有问题,似乎图像正在推离其余的菜单项as you can see in this picture.但是当菜单栏处于非活动状态时(如在我在我的另一台显示器上或不在应用程序中)问题不会发生as you can see in this picture。我很确定我的代码是正确的。

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但没有运气,也尝试过自己设定,但遇到同样的问题,但收效甚微。

1 个答案:

答案 0 :(得分:6)

在实现菜单栏中显示的漂亮NSStatusItem时,我也遇到了一些问题 当符合以下条件(以及随附资产)时,我获得了最佳结果

  • 状态图像应为基于PDF的
  • ...并使用“模板”后缀(更多关于here
  • 满足以上条件将为您提供HiDPI支持和正确渲染Light&黑暗菜单栏
  • 图像的大小应设置为(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