如何获取NSStatusItem的框架

mar*_*rcc 9 cocoa nsstatusitem nsstatusbar

NSStatusItem在我将它添加到Cocoa的状态栏后,是否有可能得到一个框架?当我的应用程序启动时,我将一个项目添加到系统状态栏,并想知道它的位置,是可能的.

小智 26

以下似乎工作 - 我已经看到类似的iOS应用程序解决方案,据说他们允许提交到应用商店,因为你仍然使用标准的SDK方法.

    NSRect frame = [[statusBarItem valueForKey:@"window"] frame];
Run Code Online (Sandbox Code Playgroud)

  • 这可以工作,并且在您没有为状态项设置自定义视图时很有用. (2认同)

Tay*_*lor 25

使用10.10,NSStatusItem具有一个button属性,用于获取状态项位置而不设置自定义视图.

NSStatusBarButton *statusBarButton = [myStatusItem button];
NSRect rectInWindow = [statusBarButton convertRect:[statusBarButton bounds] toView:nil];
NSRect screenRect = [[statusBarButton window] convertRectToScreen:rectInWindow];
NSLog(@"%@", NSStringFromRect(screenRect));
Run Code Online (Sandbox Code Playgroud)


nat*_*ate 0

如果您在状态项上设置了自定义视图:

NSRect statusRect = [[statusItem view] frame];
NSLog(@"%@", [NSString stringWithFormat:@"%.1fx%.1f",statusRect.size.width, statusRect.size.height]);
Run Code Online (Sandbox Code Playgroud)

否则我认为不可能使用可用且已记录的 API。

编辑:合并评论。

  • 不适合我。NSStatusItem 似乎没有默认视图,因此 [statusItem view] 返回 null。 (2认同)