由于NSSplitView不允许隐藏其分隔符(委托方法只允许隐藏位于拆分视图边缘的分隔符),所以我选择了子类NSSplitView并重写其绘制方法,以防止特定的分隔符绘制。
但是,当我覆盖draw(rect:)或drawDivider(in:)时,如果我折叠一个像这样的项目,NSSplitView就不再激活它的分隔器了。
activityItem.animator().isCollapsed = collapsed如果我直接调用super而不添加自己的绘图代码,甚至会发生这种情况。
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
}上面的代码足以完全破坏动画。
基本上,我想要实现的只是在分隔器旁边隐藏一个拆分视图项,但这显然要求NSSplitView不完全重新实现它。
我在这里最后一根稻草了。还有其他方法来完成隐藏项+除法器吗?
发布于 2020-02-11 09:59:45
好吧,我走了一条完全不同的路,找到了一种让它运转的方法。因此,如果您试图完全自定义分配器,这是您如何做到这一点。
dividerThickness的
NSSplitView和返回0因此,您的新拆分视图现在根本不会显示分隔符,但是您可以手动将它们添加到您需要的位置。
subview.
NSBox或自定义分隔器视图,其中您希望分隔器显示在拆分视图子视图中,更好地位于视图委托方法splitView(:additionalEffectiveRectOfDividerAt:)的顶部,并手动返回与自定义NSBox分隔符匹配的rects。您可能需要convert(:from:)之间的NSView坐标,以获得您的有效rects,但它的工作!代表可能看起来像这样
override func splitView(_ splitView: NSSplitView, additionalEffectiveRectOfDividerAt dividerIndex: Int) -> NSRect {
let item = splitViewItems[dividerIndex]
let itemView = item.viewController.view
let frame = view.convert(itemView.bounds, from: itemView)
let dividerFrame = CGRect(x: 0,
y: view.bounds.height - frame.minY,
width: frame.width,
height: 1)
return dividerFrame
}给你拿着。自定义分隔器,也工作与动画!
https://stackoverflow.com/questions/60165351
复制相似问题