【问题标题】:How do I get a titlebar to show programmatically in NSWindow?如何让标题栏在 NSWindow 中以编程方式显示?
【发布时间】:2023-03-04 14:19:01
【问题描述】:

我正在尝试以编程方式开发 OS X 可可应用程序,并且我正在尝试显示一个带有标题栏的窗口,该窗口在顶部显示通常的红绿灯(关闭、最小化、全屏)选项。 但是,当窗口显示在屏幕上时,只是一个空窗口。

这是我正在使用的代码:

class AppDelegate: NSObject, NSApplicationDelegate {

let window = NSWindow(contentRect: NSMakeRect(10, 10, 200, 200),
                        styleMask: NSWindowStyleMask.closable,
                        backing: NSBackingStoreType.buffered, defer: true)

func applicationDidFinishLaunching(_ aNotification: Notification) {

    self.titleVisibility = .visible;
    self.titlebarAppearsTransparent = false;
    self.isMovableByWindowBackground  = true;

    let controller = NSWindowController(window: window)
    controller.showWindow(self);

}

我在构建 NSWindow 时尝试了不同的NSWindowStyleMask,但没有成功。

这是我看到的:

我在 10.12 上使用 Xcode 8.3

【问题讨论】:

  • 问题是您需要在 styleMask 中添加 .titled ([.titled, .closable]) 否则标题栏和所有按钮(关闭、调整大小和最小化)将被隐藏。

标签: swift macos cocoa nswindow


【解决方案1】:

所以你需要 4 个样式蒙版。

NSWindowStyleMask.closable NSWindowStyleMask.miniaturizable NSWindowStyleMask.resizable NSWindowStyleMask.titled

要将它们合二为一,可以使用数组

[NSWindowStyleMask.closable, NSWindowStyleMask.miniaturizable, NSWindowStyleMask.resizable, NSWindowStyleMask.titled]

但请尝试以 swift 风格写作

[.closable, .miniaturizable, .resizable, .titled]

【讨论】:

  • 他不需要所有这些。他只需要在styleMask optionSet 中添加title。
  • 我最初尝试了 .titled 样式掩码,但我得到了异常 2017-04-08 12:57:25.982647+0100 X[8590:1030549] *** Assertion failure in -[X.XApplication init], /Library/Caches/com.apple.xbs/Sources/AppKit/AppKit-1504.82.104/AppKit.subproj/NSApplication.m:1778 和建​​议的数组也一样。
  • 查看我上面贴的链接
  • 如果你只是在你的 applicationDidFinishLaunching 方法中添加window.styleMask.insert(.titled),它应该会显示标题栏和关闭按钮。
  • @LeoDabus 将 .titled 添加到 init 使其崩溃,但通过 insert 方法将其添加到有效。我不知道为什么。你能解释一下吗?你也想在答案中发布这个并且不接受它作为正确的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2015-04-06
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
相关资源
最近更新 更多