无法控制 SwiftUI macOS 列表选择样式

Eth*_*Kay 7 macos swift swiftui

在本机运行的 macOS 上(不在催化剂模式下),启用选择的 SwiftUI 列表具有多种样式状态,这些状态由我似乎无法访问的隐式变量控制。因此,foregroundColor列表中视图的自定义行为会不稳定。特别是,给出下面的示例,理论上总共应该有 3 种样式状态,但实际上第 2 项实际上有 5 种可能的样式状态:

状态 前景色 背景颜色 截屏
A. 选择项目 2 并且窗口处于活动状态 白色的 口音 d
B. 选择项目 2 并且窗口处于非活动状态 *黑色(但应褪成蓝色) 灰色的 d
C. 未选择项目 2 并且窗口处于活动状态(对于非活动窗口,项目 2 看起来也相同) 蓝色的 没有任何 d
D. 刚刚点击了第 2 项,但我们需要等待大约 300 毫秒才能选择它 *蓝色 (但应该是白色) 口音 d
E. 先前选择了项目 2,单击了新项目,但我们需要等待约 300 毫秒才能选择新项目 *黑色 (但应该是蓝色) 没有任何 d

如何控制 B、D、E 状态下的前景色?对于情况 D 和 E,似乎 macOS 列表选择上存在某种内置的去抖功能,导致在首次单击后实际被选中之前出现短暂的延迟。是否有类似未反跳isHighlighted属性之类的东西?显然,内置系统正在使用类似的东西,因为无论去抖如何,非自定义列表标签颜色都会立即从黑色切换到白色,如上面状态 5 中的项目 1 所示。对于情况 B,也许有不同的颜色属性而不是foregroundColor我需要使用的颜色属性?

非常感谢任何建议!

最低限度可重现的示例(在 macOS 本机上运行,​​而不是在 Catalyst 上运行):

@main
struct ExampleApp: App {
  var body: some Scene {
    WindowGroup {
      ContentView()
    }
  }
}

struct ContentView: View {
  @State private var selected: String?
  
  var body: some View {
    NavigationView {
      List {
        NavigationLink(destination: Text("Detail 1"), tag: "1", selection: $selected) {
          Label("Item 1", systemImage: "tag")
        }
        NavigationLink(destination: Text("Detail 2"), tag: "2", selection: $selected) {
          Label {
            Text("Item 2")
              .foregroundColor(selected == "2" ? nil : .blue)
          } icon: {
            Image(systemName: "tag")
              .foregroundColor(selected == "2" ? nil : .blue)
          }
        }
      }
      .toolbar {
        Button {
        } label: {
          Image(systemName: "sidebar.left")
        }
      }
    }
    .navigationTitle("Test")
    .listStyle(.sidebar)
  }
}
Run Code Online (Sandbox Code Playgroud)

以上样式状态截图均来自此示例:

在此输入图像描述