Xcode 和 Swift - 没有标题栏但有关闭、最小化和调整大小按钮的窗口

Posted

技术标签:

【中文标题】Xcode 和 Swift - 没有标题栏但有关闭、最小化和调整大小按钮的窗口【英文标题】:Xcode & Swift - Window without title bar but with close, minimize and resize buttons 【发布时间】:2014-10-04 17:21:34 【问题描述】:

我目前在 Xcode 6 Beta 5 中使用 Swift。 我正在尝试删除标题栏,或标题栏与实际内容之间的任何可见差异。如果我在窗口的属性检查器中启用“统一标题和工具栏”,则不会发生任何明显的事情。我已经把标题去掉了。 不输入标题时,由于边框线和背景与窗口其余部分的差异,标题栏仍然可以区分,将其与实际内容分开。

一个很好的例子是当前的 Yosemite,OS X 10.10,Notes 应用程序。没有标题栏可见或可区分,只有此处所示的关闭、最小化和调整大小按钮。

我已经搜索并访问过其他帖子,但无济于事。 那些提到完全隐藏标题栏,但我不知道如何手动重新添加关闭、最小化和调整大小按钮正确,这意味着它们看起来正确,没有实际的、偷偷摸摸的图像替换和连接带有菜单栏的关闭、最小化和调整大小功能。

【问题讨论】:

【参考方案1】:

从 MacOS X 10.10 开始,您可以使用这些:

if #available(macOS 10.10, *) 
    window.titlebarAppearsTransparent = true


if #available(macOS 10.2, *) 
    window.movableByWindowBackground  = true

优胜美地有一个官方的窗口外观示例项目。你可能想看看。

【讨论】:

你能把我链接到示例项目吗?我找不到它。 @Maximilian 对不起,那是 2 年前的事了,我不再有链接了。但是这里的答案几乎涵盖了它们,即使是 Swift 版本。 是的,我正在尝试弄清楚如何制作来自 ios 的 mac 应用程序。找不到太多示例代码,也没有故事板。我无法获得对窗口的引用。尝试了几种不同的方法,总是零?编辑:终于明白了。做了一个窗口控制器,放到windowDidLoad中 如果我实现 titlebarAppearsTransparent 它也会隐藏关闭和最小化按钮【参考方案2】:

你可以使用这些:

override func viewDidAppear() 
    super.viewDidAppear()

    self.view.window?.titlebarAppearsTransparent = true
    self.view.window?.movableByWindowBackground = true

【讨论】:

【参考方案3】:

在 OS X 10.10 中添加的新窗口样式掩码 NSFullSizeContentViewWindowMask 可以解决问题。

self.window.titleVisibility = NSWindowTitleVisibility.Hidden;
self.window.titlebarAppearsTransparent = YES;
self.window.styleMask |= NSFullSizeContentViewWindowMask;

Release Notes

【讨论】:

当前版本的 Xcode 无法编译 |= 类型的运算符 @ixany 这是因为 Swift 再次以向后不兼容的方式改变了语言:| NSWindoStyleMask 是一个选项集;当前的 OptionSet 文档是 here,当前的方法似乎是 insert() 方法。【参考方案4】:

我没有足够的声誉来评论 Ranfei Songs 的答案,但是在 OSX 10.12 上运行的 titleVisibility 的语法略有不同,而不是这样:

self.window.titleVisibility = NSWindowTitleVisibility.Hidden;

您需要改用 NSWindowTitleHidden,因此更新 Ranfei 的代码将导致您需要这样指定:

self.window.titleVisibility = NSWindowTitleHidden;
self.window.titlebarAppearsTransparent = YES;
self.window.styleMask |= NSFullSizeContentViewWindowMask;

【讨论】:

【参考方案5】:

对于 Swift 3:-

self.window.titleVisibility = .hidden
self.window.titlebarAppearsTransparent = true
self.window.styleMask.insert(.fullSizeContentView)

【讨论】:

这似乎成功了一半,我在边界区域下方看到一条线。有人知道怎么去掉吗?【参考方案6】:

2017 年 9 月更新,10.11:

override func viewDidAppear() 
    super.viewDidAppear()

    self.view.window?.titleVisibility = .hidden
    self.view.window?.titlebarAppearsTransparent = true
    self.view.window?.styleMask.insert(.fullSizeContentView)

【讨论】:

【参考方案7】:

如果您使用情节提要,它只是检查器栏中的一个简单复选框。

    从故事板中选择窗口

    选中检查器窗口中的透明标题栏复选框。

这是故事板中的外观。当您构建和运行应用程序时,它看起来是一样的。

【讨论】:

以上是关于Xcode 和 Swift - 没有标题栏但有关闭、最小化和调整大小按钮的窗口的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3:保存登录信息

Xcode Swift:无法关闭弹出图像

Xcode 8.3 不支持 Swift 2.3 [关闭]

Xcode swift 2.2 命令因信号而失败:杀死:9

使用Xcode / Swift或独角兽精灵灰尘在iPad上覆盖(阻止)或关闭iOS

需要帮助创建复杂的 UIView - Swift xCode [关闭]