删除 Big Sur 中的 NSTableView 浮动组行下划线
Remove NSTableView Floating Group Row Underline in Big Sur
我有 NSOutlineView
s 以浮动组行作为标题。我的 headers 是 semi-transparent 所以滚动的内容只能在下面看到:
在大苏尔,headers 看起来像这样:
它们下面有一条下划线,并且所有透明度都被删除了 - 所以看起来好像在某处添加了背景。
我正在对 NSTableRowView
和 NSOutlineView
进行子类化以停止任何绘图:
override func draw(_ dirtyRect: NSRect) {}
我也在 NSTableRowView
上禁用 'Group Style':
override var isGroupRowStyle: Bool { get { false } set {} }
谁能告诉我线条和背景可能来自哪里?谢谢。
编辑
进一步调查显示背景和线条渲染是NSScrollView浮动内容视图(_NSScrollViewFloatingSubviewsContainerView)的一部分。似乎没有任何与此相关的选项。
我目前可以使用以下极端技巧来更改 NSTableView
中浮动 header 的背景并删除下划线:
extension YourViewController: NSTableViewDelegate {
func tableView(_ tableView: NSTableView, didAdd rowView: NSTableRowView, forRow row: Int) {
if row == 0, rowView.isGroupRowStyle {
DispatchQueue.main.async {
if let scroll = tableView.enclosingScrollView {
for sub in scroll.subviews {
if sub.className.contains("Float"),
let effect = sub.subviews.first?.subviews.first?.subviews.first as? NSVisualEffectView,
let line = sub.subviews.first?.subviews.first?.subviews.last {
effect.material = .menu
line.isHidden = true
}
}
}
}
}
}
}
添加第 0 行时,正在迭代表视图 .enclosingScrollView
的子视图(在给表视图一些时间以通过调用其余代码呈现浮动 header 之后async) 直到我们遇到我们想要更改的视图。
当然,这种代码是'bad practice'的一个例子,一旦Apple更改粘性header的实现,就会停止工作,但我不希望有什么由于所有特定条件而崩溃。
与此同时,提交反馈并请求调整 NSTableView
和 NSOutlineView
的浮动 header 可能是最好的主意。
我有 NSOutlineView
s 以浮动组行作为标题。我的 headers 是 semi-transparent 所以滚动的内容只能在下面看到:
在大苏尔,headers 看起来像这样:
它们下面有一条下划线,并且所有透明度都被删除了 - 所以看起来好像在某处添加了背景。
我正在对 NSTableRowView
和 NSOutlineView
进行子类化以停止任何绘图:
override func draw(_ dirtyRect: NSRect) {}
我也在 NSTableRowView
上禁用 'Group Style':
override var isGroupRowStyle: Bool { get { false } set {} }
谁能告诉我线条和背景可能来自哪里?谢谢。
编辑
进一步调查显示背景和线条渲染是NSScrollView浮动内容视图(_NSScrollViewFloatingSubviewsContainerView)的一部分。似乎没有任何与此相关的选项。
我目前可以使用以下极端技巧来更改 NSTableView
中浮动 header 的背景并删除下划线:
extension YourViewController: NSTableViewDelegate {
func tableView(_ tableView: NSTableView, didAdd rowView: NSTableRowView, forRow row: Int) {
if row == 0, rowView.isGroupRowStyle {
DispatchQueue.main.async {
if let scroll = tableView.enclosingScrollView {
for sub in scroll.subviews {
if sub.className.contains("Float"),
let effect = sub.subviews.first?.subviews.first?.subviews.first as? NSVisualEffectView,
let line = sub.subviews.first?.subviews.first?.subviews.last {
effect.material = .menu
line.isHidden = true
}
}
}
}
}
}
}
添加第 0 行时,正在迭代表视图 .enclosingScrollView
的子视图(在给表视图一些时间以通过调用其余代码呈现浮动 header 之后async) 直到我们遇到我们想要更改的视图。
当然,这种代码是'bad practice'的一个例子,一旦Apple更改粘性header的实现,就会停止工作,但我不希望有什么由于所有特定条件而崩溃。
与此同时,提交反馈并请求调整 NSTableView
和 NSOutlineView
的浮动 header 可能是最好的主意。