我正在尝试使用 NSWindow 模拟 NSMenu 的行为。然而,当我尝试将窗口锚定在状态项下方(屏幕顶部)时,我意识到默认情况下所有窗口在窗口顶部和状态栏之间都有 1 像素的边距。我的意思是: NSWindow at top of screen with unintended margin
我在 github 上发现了一个过时的实现,它设法在状态栏下方创建一个没有此边距的自定义窗口,但我很难弄清楚该实现是如何实现这一点的。 https://github.com/SquaredTiki/JGMenuWindow
如何去掉边距,使窗口紧贴状态栏?
最佳答案
找到解决方案了!
override func constrainFrameRect(frameRect: NSRect, toScreen screen: NSScreen?) -> NSRect {
return frameRect
}
在你的 NSWindow 子类中重写。现在你可以以任何你想要的方式移动你的 NSWindow,它将能够移动到菜单栏上方。这是因为该函数通常在窗口移动之前调用,以检查建议的新窗口位置的顶部边缘是否位于屏幕上。如果不是这种情况,该函数将返回顶部边缘确实位于屏幕上的调整位置。通过重写此函数并返回frameRect,您不会对新建议的窗口位置进行任何检查或重新调整,而是告诉窗口它可以移动到任何地方。
关于swift - 将 NSWindow 放置在屏幕顶部,没有 1 像素边距。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35808924/