将 NSWindow 放置在屏幕顶部,没有 1 像素边距。

Placing NSWindow at top of screen without 1 pixel margin.

我正在尝试使用 NSWindow 模拟 NSMenu 的行为。但是,当我尝试将 window 锚定在状态项正下方(在屏幕顶部)时,我意识到默认情况下所有 windows 在 window 和状态栏。这就是我的意思: NSWindow at top of screen with unintended margin

我在 github 上发现了一个过时的实现,该实现设法在状态栏下方创建自定义 window 而没有此边距,但我很难弄清楚该实现如何实现这一点. https://github.com/SquaredTiki/JGMenuWindow

如何去掉边距,使 window 紧贴状态栏?

找到解决方案!

override func constrainFrameRect(frameRect: NSRect, toScreen screen: NSScreen?) -> NSRect {
    return frameRect
}

在您的 NSWindow 子类中覆盖。现在您可以以任何您希望的方式移动 NSWindow,它将能够移动到菜单栏上方。这是因为此函数通常在 window 移动之前调用,以检查建议的新 window 位置是否有其顶部边缘位于屏幕上。如果不是这种情况,该函数将 return 调整后的位置,使上边缘确实位于屏幕上。通过覆盖此函数和 returning frameRect,您不会对新提议的 window 位置进行任何检查或重新调整,您是在告诉 window 它可以移动到任何地方。

您似乎试图将 "menu" 附加到 NSStatusItem。您实际上没有附加菜单并将相应的 NSMenuItem 视图设置为您想要的样子,这是有原因的吗?苹果在这里有一个例子:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MenuList/Articles/ViewsInMenuItems.html