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 - 没有标题栏但有关闭、最小化和调整大小按钮的窗口的主要内容,如果未能解决你的问题,请参考以下文章