Objective c 跟随带有窗口的NSStatusItem-切换到更高显示屏时位置不正确
问题是:我必须跟随应用程序的NSStatusItem弹出窗口/窗口 对此的一般解决方案(如建议的或)是向NSStatusItem添加自定义视图,并获取视图的窗口框架(statusItem.view.window.frame),然后通过NSWindowDidMoveNotification通知statusItem.view.window连接到移动事件 除非用户连接的外部显示器比以前的显示器高(例如Mac Book用户连接的外部显示器),否则此解决方案的工作效率为99%。在这种情况下,statusItem.view.window.frame将不正确,X坐标将实际正确,但Y坐标将与较小屏幕中的相同 我已经检查过了,大多数菜单栏应用程序在你点击状态项时会弹出一个窗口,但正如我所描述的那样,它们都放错了位置 我的解决方案是不使用此帧的Y坐标,而是使用相应NSScreen的visibleFrame高度,如下所示:Objective c 跟随带有窗口的NSStatusItem-切换到更高显示屏时位置不正确,objective-c,macos,cocoa,Objective C,Macos,Cocoa,问题是:我必须跟随应用程序的NSStatusItem弹出窗口/窗口 对此的一般解决方案(如建议的或)是向NSStatusItem添加自定义视图,并获取视图的窗口框架(statusItem.view.window.frame),然后通过NSWindowDidMoveNotification通知statusItem.view.window连接到移动事件 除非用户连接的外部显示器比以前的显示器高(例如Mac Book用户连接的外部显示器),否则此解决方案的工作效率为99%。在这种情况下,statusI
NSScreen *screenWithMenuBar = [[NSScreen screens] objectAtIndex:0];
if( screenWithMenuBar ) {
// correct the top position by the 'screen with the MenuBar's height
// workaround: without this the window will be off-placed when the user plugs in an external display,
// a display with more height
NSRect visibleRect = [screenWithMenuBar visibleFrame];
originPoint.y = visibleRect.size.height + visibleRect.origin.y;
}
正如苹果官方文档中所述,它应该可以工作,但对我来说,这似乎太难了
你们有没有经历过这种错误?您找到更好的解决方案了吗?获取
[[NSStatusBar systemStatusBar]thickness]
的新值有效吗?@KeithSmiley它总是一样的(切换到外部显示器时菜单栏的厚度不会改变)-抱歉,也许我不明白您的建议-这应该有什么帮助?