【问题标题】:Placing NSWindow at top of screen without 1 pixel margin.将 NSWindow 放置在没有 1 像素边距的屏幕顶部。
【发布时间】:2016-03-05 01:30:38
【问题描述】:

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

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

如何去除边距以使窗口紧贴状态栏?

【问题讨论】:

    标签: swift macos cocoa nswindow nsmenu


    【解决方案1】:

    找到了解决方案!

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

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

    【讨论】:

      【解决方案2】:

      您似乎试图将“菜单”附加到NSStatusItem。您是否有理由不实际附加菜单并将相应的NSMenuItem 的视图设置为您想要的任何外观?苹果在这里有一个例子:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MenuList/Articles/ViewsInMenuItems.html

      【讨论】:

      • 是的,我不想要 NSMenu 的某些默认行为,例如当您关注应用程序中的另一个窗口时它会关闭!
      猜你喜欢
      • 1970-01-01
      • 2014-05-09
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 2010-11-17
      • 1970-01-01
      • 2017-02-17
      相关资源
      最近更新 更多