2016-03-05 64 views
1

我想模拟使用NSWindow的NSMenu的行为。但是,当我尝试将状态项下方的窗口(位于屏幕顶部)锚定时,我意识到默认情况下,所有窗口在窗口顶部和状态栏之间都有1像素的余量。这里是我的意思是: NSWindow at top of screen with unintended margin将NSWindow放置在屏幕顶部,没有1像素边距。

我发现,管理没有这个利润率创造了状态栏下方的一个自定义窗口在GitHub上一个过时的实现,但我有一个很难搞清楚的实施如何实现这一点。 https://github.com/SquaredTiki/JGMenuWindow

我该如何摆脱边距,使窗口贴合状态栏?

回答

2

找到解决方案!

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

覆盖您的NSWindow子类。现在你可以以任何你想要的方式移动你的NSWindow,并且它将能够在菜单栏上方移动。这是因为这个函数通常在移动窗口之前调用,以检查建议的新窗口位置是否在顶部边缘位于屏幕上。如果不是这种情况,该功能将返回一个调整后的位置,在该位置上边缘位于屏幕上。通过重写此函数并返回frameRect,您不会对新建议的窗口位置进行任何检查或重新调整,而是告诉窗口它可以在任何位置移动。