Swift 大屏幕上的表格单元格图标内容色调错误

Swift 大屏幕上的表格单元格图标内容色调错误,swift,macos,cocoa,appkit,macos-big-sur,Swift,Macos,Cocoa,Appkit,Macos Big Sur,我目前正在将我的应用程序迁移到Big Sur,但是我无法使NSTableCellViews正常运行。Big Sur现在在表格单元格图像视图中为模板图像使用系统色调,如您在Finder中看到的示例: 现在,在我的NSTableViews(类型源代码列表)中,这在很大程度上可以正常工作,但是在我选择表格单元格之前,某些单元格似乎不会应用色调。我尝试了一切,包括只使用一个新的NSOutlineView和NSTableCellViews,没有任何修改,但没有成功 以下是我的感受: 表格的第一个单元格

我目前正在将我的应用程序迁移到Big Sur,但是我无法使
NSTableCellView
s正常运行。Big Sur现在在表格单元格图像视图中为模板图像使用系统色调,如您在Finder中看到的示例:

现在,在我的
NSTableView
s(类型源代码列表)中,这在很大程度上可以正常工作,但是在我选择表格单元格之前,某些单元格似乎不会应用色调。我尝试了一切,包括只使用一个新的
NSOutlineView
NSTableCellView
s,没有任何修改,但没有成功

以下是我的感受:

表格的第一个单元格在第一个显示时始终显示为未打印。有人知道这是什么原因吗

PS:我怀疑
NSImageView
有问题,因为当我在图像视图上手动设置色调颜色时,只有在我选择单元格至少一次后,色调才会开始出现:

cell.imageView?.contentTintColor = .red
据我所知,这是一个苹果SDK错误

实现以下内容并仅返回强调色似乎可以缓解此问题,但还不能完全解决此问题。单个图标被解开的情况仍然可能发生

extension MyController: NSOutlineViewDelegate {

    @available(OSX 11.0, *)
    func outlineView(_ outlineView: NSOutlineView,
                     tintConfigurationForItem item: Any) -> NSTintConfiguration? {
        .init(preferredColor: .controlAccentColor)
    }
}
然而,我认为这不是必须的

PS:即使使用此“修复”单元图标,有时也不会应用着色。

部分修复 如果您使用的是Interface Builder:

  • 选择带有图标的
    NSTableCellView
  • 删除
    imageView
    cellView
    之间的连接
  • 在单元格中选择
    imageView
    ,并使用属性检查器手动设置着色颜色。(您可以选择“强调色”,它仍将提供动态强调色色调。)
  • 现在,NSOutlineView将不再在随机时间神奇地更改色调颜色,因为它无法在单元格中找到NSImageView

    缺点:
  • 您不能再使用
    tintConfigurationForItem
    API

  • 当窗口失去关键点状态时,大纲视图将不再自动降低图标的不透明度。(您可以手动执行此操作,方法是遍历行,查找
    NSImageView
    ,然后自己设置值。这是否适用于您的用例是一个问题。)

  • 结论: 我确实认为你是对的:苹果公司的某个人把着色搞砸了。苹果工程公司将在2035年和宇宙热死之间的某个时候着手解决这个问题


    对我来说,当我重新加载大纲视图时,图标会变为100%黑色,然后在选择行和取消选择行时,图标会变回正确的色调。完成一次后,问题不会再次出现,直到重新启动应用程序。

    不幸的是,我没有修复方法,但我可以确认,你不是唯一一个看到这种行为的人。你装了雷达了吗?期待着在绕红矮星轨道飞行时阅读固定补丁。