SwiftUI列表在macOS上:如何在选定行中突出显示内容?

3
在SwiftUI的List中,当选择一行时,会在选定区域绘制蓝色选择,并自动将前景Text设置为默认的primary颜色白色。对于其他具有自定义颜色的视图,我希望能够确保它们变成白色以匹配系统应用程序。例如,请参见所选行上的蓝色点:

list

示例代码:
List(selection: $selection) {
    ForEach(0..<4) { index in
        HStack {
            Image(systemName: "circle.fill")
                .foregroundColor(.blue)
            Text("Test")
        }
        .tag(index)
    }
}

有没有什么技巧可以在这里实现正确的结果?
使用NSTableCellView,有backgroundStyle属性,但我找不到类似的东西。
我已经搜索了所有可用的环境变量,但没有找到合适的内容。
我还尝试手动为每一行的视图包含一个isSelected绑定,但选择绑定直到鼠标松开时才会更新,而高亮显示在鼠标按下和拖动时更新,因此这会导致闪烁的外观,也不正确。
我还希望自定义不仅是单个SF Symbol图像,还有一个使用我想要变成白色的自定义前景色绘制的RoundedRectangle。
1个回答

2

方法

  • 为单元格使用标签

代码

struct ContentView: View {
    
    @State private var selection: Int?
    
    var body: some View {
        List(selection: $selection) {
            ForEach(0..<4) { index in
                Label("Test", systemImage: "circle.fill")
                .tag(index)
            }
        }
    }
}

截图

突出显示的单元格图像颜色


1
非常有帮助,谢谢。我认为在99%的情况下,这将是正确的做法。它解决了我大部分单元格的问题,但我还有一个额外的情况需要考虑。那就是带有自定义前景色的 RoundedRectangle,在选择时需要将其染成白色。因此,如果对于具有自定义颜色的自定义形状有任何其他想法,那将非常有帮助! - Supersheep
您可以使用反馈助手提交反馈,并附上一个使用自定义形状演示问题的示例代码。同时,您还可以向TSI(DTS团队)提出问题,他们可能能够提供帮助。在等待期间,您可以使用与您想要的内容最接近的现有SF符号之一 Label("Test", systemImage: "rectangle.fill") - user1046037
根据我在iOS 16.4上的测试,只有“标签”和“切换”可以适应所有4种颜色变体(浅色/深色x选定/未选定)。 - yo1995

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接