gpt4 book ai didi

swift - 无法覆盖 NSTableViewRow draw() 行为以在 NSOutlineView 中透明

转载 作者:行者123 更新时间:2023-11-30 11:35:36 25 4
gpt4 key购买 nike

我有一个 NSOutlineView,其中始终使用自定义 NSTableViewRows。

我已经重写了 NSTableViewRow 上的绘制方法:

override func draw(_ dirtyRect: NSRect) {}

...所以它不应该绘制任何东西。然而,行有时是纯黑色的,有时是透明的。我无法找出具体时间的模式。

如果我确实在绘图函数中放置了一些东西,它发生时就会在黑色上绘制,除了用纯色填充之外,我似乎无法清除绘图函数中的黑色。

为了清除我已经尝试过的:

let context = NSGraphicsContext.current?.cgContext
context?.clear(dirtyRect)

NSColor.clear.setFill()
dirtyRect.fill(using: .copy)

如果我查看调试 View 层次结构,我可以清楚地看到 NSTableViewRow 本身是黑色的。

我尝试在绘图函数中设置wantLayer并设置图层的backgroundColor,但没有效果。

谁能解释一下这种黑色填充物可能来自哪里以及它存在于哪里!

我设法确保它不存在的唯一方法是使用:

override var wantsUpdateLayer: Bool { get { return true } }

...这表明 NSTableViewRow 正在做一些有点奇怪的事情。

最佳答案

(现在我们已经找到了解决方法,从评论中复制)

NSTableRowView 的文档指出它“负责显示与行相关的属性,包括选择突出显示和组行外观”。因此,基行 View 类显然正在做一些事情,而 TableView 可能对此做出假设,我认为它很棘手且高度优化。 :(

解决方法是在 draw(_:NSRect) 中调用 super.draw(dirtyRect) 只是为了让基础 NSTableRowView类执行它需要执行的任何内部魔法,然后删除它绘制的任何内容并在其上绘制。

关于swift - 无法覆盖 NSTableViewRow draw() 行为以在 NSOutlineView 中透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49821312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com