由于NSSplitView
不允许隐藏其分隔符(委托方法仅允许隐藏位于拆分视图边缘的分隔符),因此我选择继承NSSplitView
并将其draw方法重写为防止绘制特定的分隔线。
但是,一旦我覆盖draw(rect:)
或drawDivider(in:)
,NSSplitView
就不会像我这样折叠一件物品时动画化它的分隔线
activityItem.animator().isCollapsed = collapsed
即使我直接调用super
而没有添加自己的绘图代码,甚至会发生这种情况
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
}
上面的代码足以完全破坏动画。
基本上,我想要实现的是将拆分视图项隐藏在其分隔符旁边,但这显然要求太多NSSplitView
而又没有完全重新实现它。
我在这里的最后一根稻草上。还有其他方法可以隐藏项目+分隔符吗?
答案 0 :(得分:1)
好吧,我采用了一种完全不同的方式,并找到了一种使其工作的方式。因此,如果您要完全自定义分隔线,这就是您的方法。
NSSplitView
并从0
返回dividerThickness
因此您的新拆分视图现在根本不会显示分隔线,但是您可以在所需的位置手动添加分隔线
添加NSBox
或自定义分隔线视图,以使分隔线显示在拆分视图子视图中,最好在子视图的顶部。
重写拆分视图委托方法splitView(:additionalEffectiveRectOfDividerAt:)
,并手动返回与您的自定义NSBox
分隔符匹配的rects
您可能需要在convert(:from:)
坐标之间NSView
才能获得有效的校正,但这是可行的!委托人可能看起来像这样
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
}
那里有。自定义分隔线也可用于动画!