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

标签 swift macos cocoa nswindow nsmenu

我正在尝试使用 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/

相关文章:

objective-c - Cocoa 兼容不同的 Mac 操作系统

swift - Xcode 7 如何获取文本字段输入?

ios - 6.0.1 和表更改 "UILabel? does not have a member named ' 文本”

swift - 为什么嵌套任务在父任务被取消时没有被取消?

arrays - 快速将新列追加到数组中

ios - 从另一个 ViewController 访问变量

objective-c - OSX/Objective-C 窗口管理 : manipulate the frames & visibility of other applications

ios - 可以使用 AudioUnit (CoreAudio) 将音频编码为 AAC 或 MP3 吗?

python - IPython 3.5 返回 "bad interpreter: No such file or directory"

cocoa - 如何获取当前网络位置名称?