【问题标题】:Allow an NSWindow (NSPanel) to float above full screen apps允许 NSWindow (NSPanel) 在全屏应用程序上方浮动
【发布时间】:2016-07-12 09:02:41
【问题描述】:

我正在尝试添加一个小窗口,该窗口可从系统中的任何位置向主应用程序提供“快速输入”。

用户可以按下热键,窗口弹出,并浮动在所有其他窗口之上。

在大多数情况下,这不是什么大问题。我可以将 NSWindow 配置为:

level = Int(CGWindowLevelKey.TornOffMenuWindowLevelKey.rawValue)
collectionBehavior = .CanJoinAllSpaces

我还可以将其设置为带有NSNonactivatingPanelMask 选项的 NSPanel。

唯一的问题是:即使用户在包含全屏应用程序的空间中,如何才能使窗口在屏幕上弹出?

我知道当应用程序是 LSUIElement=true(在 Dock 中没有位置的应用程序)时这是可能的,但我的不是。

【问题讨论】:

  • 你怎么知道这只有在 LSUIElement=true 时才有效?它记录在某处吗?我花了一天时间使用不同的配置,直到得出相同的结论,它只适用于 LSUIElement=true。有没有办法让这种相同的行为与 LSUIElement=false 一起使用?

标签: macos cocoa nswindow nspanel


【解决方案1】:

好的,我的想法是对的,棘手的部分是所有选项如何相互作用。以下是有效的:

  • NSPanel,不是 NSWindow
  • 风格面具:[.borderless, .nonactivatingPanel]

还有这些属性:

panel.level = .mainMenu
panel.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]

Swift 4.2 代码

使用这些设置创建并显示面板。然后您可以将面板拖到全屏应用程序上(双显示器设置)。

let panel2 = NSPanel(contentRect: NSRect(x: 0, y: 0, width: 200, height: 200), styleMask: [.titled, .nonactivatingPanel], backing: .buffered, defer: true)
panel2.level = .mainMenu
panel2.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]
panel2.orderFrontRegardless()

切换到无边框将阻止用户移动您的窗口。

let panel2 = NSPanel(contentRect: NSRect(x: 0, y: 0, width: 200, height: 200), styleMask: [.borderless, .nonactivatingPanel], backing: .buffered, defer: true)
panel2.level = .mainMenu
panel2.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]
panel2.orderFrontRegardless()

【讨论】:

    【解决方案2】:

    your self-answer 的 Swift 3.0 版本是

    window.level = Int(CGWindowLevelForKey(.mainMenuWindow))
    window.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]
    

    【讨论】:

      【解决方案3】:

      Swift 4.0 的翻译是这样的。我还在测试这个,但它似乎正在工作。

      self.view.window?.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(.mainMenuWindow)))
      self.view.window?.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]
      

      【讨论】:

        猜你喜欢
        • 2013-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多