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

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


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

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

【问题讨论】:

    标签: swift cocoa interface-builder osx-yosemite titlebar


    【解决方案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】:

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

          1. 从故事板中选择窗口

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

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

          【讨论】:

            猜你喜欢
            • 2011-12-02
            • 1970-01-01
            • 2014-04-20
            • 2019-07-24
            • 1970-01-01
            • 1970-01-01
            • 2012-12-16
            • 2014-11-25
            • 2010-10-03
            相关资源
            最近更新 更多