5

この写真でわかるように、アイテムの画像に問題があり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ましたが運が悪く、自分で設定しようとしましたが、同じ問題でしたが、ほとんど改善されませんでした。

4

1 に答える 1

12

NSStatusItemメニューバーに表示される見栄えの良いものを実装する際にも、いくつかの問題がありました。
アイテム (および付随するアセット) について次の基準が満たされたときに、最高の結果が得られました。

  • ステータス画像は PDF ベースである必要があります
  • ...そして「テンプレート」サフィックスを使用します(詳細はこちら
  • 上記を満たすことで、HiDPI のサポートと、明るいメニュー バーと暗いメニュー バーの両方の適切なレンダリングが提供されます。
  • 画像のサイズは (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
于 2015-11-14T12:30:51.557 に答える