在 NavigationView 的 SwiftUI 列表中设置雪佛龙的颜色

Posted

技术标签:

【中文标题】在 NavigationView 的 SwiftUI 列表中设置雪佛龙的颜色【英文标题】:Set Color of Chevron in a SwiftUI List in a NavigationView 【发布时间】:2020-07-08 09:05:19 【问题描述】:

我有这个列表,我是 NavigationView。 在黑暗模式下,雪佛龙(红色圆圈)几乎看不见。

如何在列表中设置雪佛龙的颜色。

struct ContentView: View 
    var body: some View 
      NavigationView
        List 
          Line(text: "Line 1")
          Line(text: "Line 2")
          Line(text: "Line 3",selected: true)
          Line(text: "Line 4")
          Line(text: "Line 5")
        
      
    


struct Line: View 
  var text :String
  var selected = false
  @Environment(\.colorScheme) var colorScheme

  var body: some View 
    NavigationLink(destination: Text("D"))  Text(text)
      .listRowBackground(selected ? Color.blue : Color(.systemBackground))
      .foregroundColor(selected ? Color.white : Color(.label))
    .onTapGesture(perform: print ("tap")
     )
  

【问题讨论】:

【参考方案1】:

标准的人字形不是光栅图像的符号,这里是

这就是为什么它不会对任何变色修饰剂做出反应。

解决方案,禁用标准 chevron 并使用自己的自定义,(列表的行为相同),如下所示

HStack 
    Text(text)
    NavigationLink(destination: Text("D"))  EmptyView()  // disabled  !
    Image(systemName: "chevron.right")                     // << custom !!
        .foregroundColor(Color.red)                        // any color !!!

【讨论】:

然后,当您进入编辑模式时,重新发明的人字形仍然可见,因为为什么要考虑 UIKit 开箱即用支持的所有边缘情况,对吧?这绝不是一个好的解决方案。【参考方案2】:

在我的环境中,默认的 chevron 显示在自定义的 chevron 下。

添加不透明度(0),它可以工作。

NavigationLink(destination: Text("D"))  EmptyView() 
    .opacity(0) // Add this

【讨论】:

这是正确答案。应该有更多的赞成票。【参考方案3】:

您可以使用accentColor 属性:

struct ContentView: View 
  var body: some View 
    NavigationView
      List 
        Line(text: "Line 1")
        Line(text: "Line 2")
        Line(text: "Line 3",selected: true)
        Line(text: "Line 4")
        Line(text: "Line 5")
      .accentColor(.black)
    
  

【讨论】:

以上是关于在 NavigationView 的 SwiftUI 列表中设置雪佛龙的颜色的主要内容,如果未能解决你的问题,请参考以下文章

NavigationView 中的 ListView 不滚动

如何在android中刷新navigationview的headview内容

NavigationView + TextField 背景

Android NavigationView 导航抽屉的使用

DrawerLayout 和 NavigationView 的使用

NavigationView 顶部的额外空间