我有一个复杂的应用程序,在这个应用程序中,我使用NSSplitView创建各种侧边栏,这些侧边栏可以用重力打开/关闭(即,将拆分条拖到足够近的边缘,视图就会完全关闭),就像XCode在它的UI中一样。
当被隐藏的嵌套视图不包含splitView(_:constrainSplitPosition:ofSubviewAt:) / NSTabViewControllerView时,利用NSTabViewControllerView的效果很好,但是如果它这样做了,则窗口拒绝完全关闭,使得tabView可见。
class ViewController: NSViewController, NSSplitViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
splitView.delegate = self
}
@IBOutlet var splitView: NSSplitView!
@IBOutlet var tabView: NSTabView!
let gravityTolerance: CGFloat = 180.0
func splitView(
_ splitView: NSSplitView,
constrainSplitPosition proposedPosition: CGFloat,
ofSubviewAt dividerIndex: Int
) -> CGFloat {
print("proposed splitter width: \(dividerIndex) => \(proposedPosition)")
var retVal = proposedPosition
if dividerIndex == 0 {
if proposedPosition <= gravityTolerance {
// tabView.isHidden = true
retVal = 0.0
} else {
// tabView.isHidden = false
}
}
return retVal
}
}



将选项卡视图设置为"isHidden“没有什么区别,而且我非常肯定,如果我手动编写代码,所有这些都会正常工作。但是,是否有一些简单的修正(可能是约束)是我遗漏的呢?

发布于 2022-07-26 15:52:11
从Willeke的评论..。就像一种魅力。似乎有很多特定于苹果的支持是我所不知道的:(很明显,我们可以得到比这个更好的支持)。
func splitView(
_ splitView: NSSplitView,
canCollapseSubview subview: NSView
) -> Bool
{
return true
}https://stackoverflow.com/questions/73112864
复制相似问题