【问题标题】:Make NSPanel always on top使 NSPanel 始终位于顶部
【发布时间】:2020-07-23 15:35:38
【问题描述】:

我正在为 react-native-macos 搭建一座桥梁。我需要具有与 Spotlight 相同行为的 NSPanel。 我以编程方式创建它,但有疑问:

  1. 不能让它总是在最前面(如果应用程序被隐藏,它也应该可以工作)
  2. 面板内有NSTextField。如果我尝试隐藏标题面板,我将无法更改该字段。好像已停用。
  3. 显示结果的最佳方式是什么(例如在聚光灯下)
private var panel = NSPanel()
private var textField = NSTextField(frame: NSMakeRect(0,0,400,40))

var frame: NSRect = CGRect(x: 0, y: 0, width: 400, height: 40)
frame.size = NSSize(width: 400, height: 60)
panel.setFrame(frame, display: true)
  
let view: NSView = NSView(frame: frame)
    
myTextField.stringValue = "Some text"
myTextField.isEnabled = true
myTextField.font = NSFont.systemFont(ofSize: 28)
    
view.addSubview(myTextField)

panel.contentView?.addSubview(view)

panel.makeKeyAndOrderFront(panel)
panel.center()

【问题讨论】:

    标签: swift macos react-native nswindow nspanel


    【解决方案1】:

    让它浮动

    panel.isFloatingPanel = true           // << this one !!
    panel.makeKeyAndOrderFront(panel)
    panel.center()
    

    【讨论】:

    • 我在这里找到了解决方案stackoverflow.com/questions/36205834/… 但仍然有第二个问题。如果面板没有标题栏,则无法更改文本字段
    • 隐藏应用程序时从屏幕上删除所有应用程序窗口。然后,您需要的不是面板,而是不同类型的应用程序、命名的应用程序代理和具有高窗口级别的自定义窗口。例如阅读this article 开始。
    【解决方案2】:

    这对我有用

    panel.level = .mainMenu
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      相关资源
      最近更新 更多