我需要根据我的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
我相信这是根本原因...当用户进入全屏模式时,还有什么想法让这个有用吗?