Since NSSplitView
不允许隐藏其分隔线(委托方法仅允许隐藏位于分割视图边缘的分隔线),我选择子类化NSSplitView
并重写其绘制方法以防止绘制特定的分隔线。
但是,一旦我覆盖其中任何一个draw(rect:)
or drawDivider(in:)
the NSSplitView
如果我像这样折叠项目,则不再为其分隔线设置动画
activityItem.animator().isCollapsed = collapsed
如果我打电话甚至会发生这种情况super
直接不用添加我自己的绘图代码
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
}
上面的代码足以完全破坏动画。
基本上我想要实现的就是将分割视图项目隐藏在其分隔线旁边,但这显然要求太多了NSSplitView
无需完全重新实现它。
我已经压垮了这里的最后一根稻草。还有其他方法可以完成隐藏项目+分隔线吗?
好吧,我走了一条完全不同的路,找到了一种让它发挥作用的方法。因此,如果您想完全自定义分隔线,这就是您的做法。
- 子类
NSSplitView
并返回0
from dividerThickness
因此,您的新分割视图现在根本不会显示分隔线,但您可以手动将它们添加到您想要的位置
Add NSBox
或者您希望分隔线显示在分割视图子视图中的自定义分隔线视图,最好显示在子视图的顶部。
重写分割视图委托方法splitView(:additionalEffectiveRectOfDividerAt:)
并手动返回与您的自定义匹配的矩形NSBox
分隔线
你可能需要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
}
你有它。自定义分隔线也适用于动画!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)