在全屏模式下根据NSSplitView对齐NSToolbarItem

时间:2017-07-31 20:29:26

标签: swift macos split fullscreen nstoolbar

我需要根据我的SplitView对齐NSToolbarItem。我正在寻找类似于this的东西,但我不认为使用apple的私有方法是个好主意。然后我遇到了this answer,这就是诀窍。

这就是我现在所拥有的:

func addToolbarConstraints() {
    if let toolbarItems = delegate.baseWindowController.window?.toolbar?.items {
        if let n = toolbarItems.index(where: { $0.label == "EditPreview"}) {

            toolbarItems[n].view!.translatesAutoresizingMaskIntoConstraints = false

            toolbarItems[n].minSize = CGSize(width: 200.0, height: 0.0)
            toolbarItems[n].maxSize = CGSize(width: 1000.0, height: 100.0)
            toolbarItems[n].view!.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true

        }
    }
}

现在到了真正的问题。不幸的是,当用户进入全屏模式时,这将停止工作。原因是以下错误:

由于未捕获的异常终止应用程序' NSGenericException',原因:'无法使用锚点激活约束,因为它们没有共同的祖先。约束或其锚点是否引用不同视图层次结构中的项目?这是非法的。'

实际上,如果我们通过调试器检查View UI Hierarchy,我们可以注意到NSToolbar将不再是主要的" NSWindow - Window"查看层次结构相反,会有一个名为NSToolbarFullScreenWindow的单独项目:

http://i.imgur.com/HD4vVYz.png

我相信这是根本原因...当用户进入全屏模式时,还有什么想法让这个有用吗?

0 个答案:

没有答案