OSX 状态栏图像大小调整 - Cocoa
OSX Status Bar Image Sizing - Cocoa
所以我对 NSStatusBar
项目的图像有疑问,图像似乎正在远离菜单项的其余部分 as you can see in this picture. But when the menubar is inactive (as in i'm on my other monitor or not in the app) the problem doesn't happen 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
但没有成功,也试过自己设置它,但同样的问题,但没有什么改善。
在实现菜单栏中显示的美观 NSStatusItem
时,我也遇到了一些问题。
当项目(和随附资产)满足以下条件时,我得到了最好的结果
- 状态图像应基于 PDF
- ... 并使用 "Template" 后缀(更多关于 here)
- 满足以上条件将为您提供 HiDPI 支持以及浅色和深色菜单栏的正确渲染
- 图片大小应设置为(18.0, 18.0)
- 要获得与状态栏中的默认 OS X 项目相同的突出显示,
highlightMode
必须打开并且该项目必须具有关联的 NSMenu
此代码段将为您提供一个在系统主菜单中具有漂亮外观 NSStatusItem
的基本应用程序(我在此处使用了系统提供的图像,但您可以使用自定义 18x18 PDF 获得相同的结果"Template" 姓名后缀):
@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
所以我对 NSStatusBar
项目的图像有疑问,图像似乎正在远离菜单项的其余部分 as you can see in this picture. But when the menubar is inactive (as in i'm on my other monitor or not in the app) the problem doesn't happen 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
但没有成功,也试过自己设置它,但同样的问题,但没有什么改善。
在实现菜单栏中显示的美观 NSStatusItem
时,我也遇到了一些问题。
当项目(和随附资产)满足以下条件时,我得到了最好的结果
- 状态图像应基于 PDF
- ... 并使用 "Template" 后缀(更多关于 here)
- 满足以上条件将为您提供 HiDPI 支持以及浅色和深色菜单栏的正确渲染
- 图片大小应设置为(18.0, 18.0)
- 要获得与状态栏中的默认 OS X 项目相同的突出显示,
highlightMode
必须打开并且该项目必须具有关联的NSMenu
此代码段将为您提供一个在系统主菜单中具有漂亮外观 NSStatusItem
的基本应用程序(我在此处使用了系统提供的图像,但您可以使用自定义 18x18 PDF 获得相同的结果"Template" 姓名后缀):
@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