2

我正在为 Big Sur 开发一个新的 Xcode 项目,主情节提要中有一个“带侧边栏的拆分视图”场景。我想让窗口标题和工具栏具有您在 Safari 或 Finder 的工具栏中看到的半透明效果。在我的故事板中,我指定了“全尺寸内容视图”和“隐藏标题文本”,在故事板中它看起来像我想要的:

在此处输入图像描述

但是当我构建并运行它时,窗口的工具栏是纯白色的:

在此处输入图像描述

现在,如果我禁用“隐藏标题栏”复选框,它在故事板中看起来很好,标题和工具栏项目在同一行:

在此处输入图像描述

现在,当我构建并运行它时,工具栏具有我想要的半透明效果,但标题位于工具栏项目上方的第二层:

在此处输入图像描述

我不确定我还能做些什么来控制它。理想情况下,我会隐藏标题栏并保持半透明,但它似乎不起作用。还有什么我可以尝试控制的吗?

如果不是,我希望标题与工具栏项处于同一级别,就像在情节提要中一样。但即使这样也不能按预期工作。

关于我可以尝试什么的任何想法?我尝试更改工具栏样式,但它们都有相似的结果。

编辑:我尝试使用 Apple 自己的代码“使用大纲和拆分视图导航分层数据”,并在启用“全尺寸内容视图”和“隐藏标题栏”复选框调整情节提要后,我看到了同样的问题: 即工具栏变成白色。所以这很可能是苹果框架的错误?我不确定,所以我提交了一个错误来找出答案。

4

1 回答 1

0

我创建了一个在 High Sierra 和 Catalina 上构建良好的应用程序,它可能构建在 OX11 上。它删除了标题栏,但我不使用工具栏。试试这个,它可能与您想要的类似 - 您可能需要注释掉一些设置等。

创建一个文件“MainWindow”,它是 NSWindowController 的子类。填写文件:

class MainWindow: NSWindowController {

    var controller: ViewController?


    override func windowDidLoad() {
        super.windowDidLoad()

        controller = self.contentViewController as? ViewController
        self.smartWindow()
        self.activateWindowDrag()
    }

}


// you may prefer the below as a separate file
extension NSWindowController {

    func smartWindow() {
        self.window?.styleMask.insert(NSWindow.StyleMask.unifiedTitleAndToolbar)
        self.window?.styleMask.insert(NSWindow.StyleMask.fullSizeContentView)
        self.window?.styleMask.insert(NSWindow.StyleMask.titled)
    
        self.window?.toolbar?.isVisible         = false
        self.window?.titleVisibility            = .hidden
        self.window?.titlebarAppearsTransparent = true
    }

    func activateWindowDrag() {
        self.window?.isMovableByWindowBackground = true
    }

}
于 2021-01-11T16:35:13.733 回答