5

在 SwiftUI 中,当 NavigationLink 放置在 Form 中时,一个箭头会自动出现在 NavigationLink 的尾部。如何更改此箭头的颜色?

struct example: View {
    var body: some View {
        NavigationView {
            Form {
                NavigationLink(destination: Text("Example destination")) {
                    Text("Example link")
                }
            }
        }
    }
}
4

2 回答 2

10

Form/List正在重用UITableView,更改披露指示符一直是个问题tintColor *请参阅:问题
因此,.accentColor在这里也行不通也就不足为奇了。

建议主要是用自定义视图替换它。
所以让我们在SwiftUI.

解决方案:

struct ContentView: View {
  var body: some View {
    NavigationView {
      Form {
        //Overlap NavigationLink and our Custom Cell arrangement
        ZStack {
          //Create a NavigationLink without the disclosure indicator
          NavigationLink(destination: Text("Hello, World!")) {
            EmptyView()
          }

          //Replicate the default cell
          HStack {
            Text("Custom UI")
            Spacer()
            Image(systemName: "chevron.right")
              .resizable()
              .aspectRatio(contentMode: .fit)
              .frame(width: 7)
              .foregroundColor(.red) //Apply color for arrow only
          }
          .foregroundColor(.purple) //Optional: Apply color on all inner elements
        }

        //Default style
        NavigationLink(destination: Text("Hello, World!")) {
          Text("Default UI")
        }
      }
    }
  }
}
  • NavigationLinkEmptyView摆脱了默认的披露指标
  • HStack是我们的自定义单元格View,它复制了默认单元格排列
    • Image(systemName: "chevron.right")是我们替代披露指标
    • .foregroundColor将允许我们在整个HStack或仅Image(您的选择)上溅上颜色
  • ZStack允许重叠上述两个。
    • NavigationLink基本上使整个单元格可点击

结果:

结果

于 2020-04-26T19:18:22.357 回答
5

您可以提供自定义视图并隐藏默认 NavigationLink 箭头:

       NavigationLink(destination: Text("Hello, World!")) {}
       .opacity(0)
       .background(
         HStack {
            Text("Custom UI")
            Spacer()
            Image(systemName: "chevron.right")
              .resizable()
              .aspectRatio(contentMode: .fit)
              .frame(width: 7)
              .foregroundColor(.red) //Apply color for arrow only
          }
          .foregroundColor(.purple)
       ) 

或将 NavigationLink 指定为背景(这样您就可以自动调整大小):

         HStack {
            Text("Custom UI")
            Spacer()
            Image(systemName: "chevron.right")
              .resizable()
              .aspectRatio(contentMode: .fit)
              .frame(width: 7)
              .foregroundColor(.red) //Apply color for arrow only
          }
          .foregroundColor(.purple)
          .background(
             NavigationLink(destination: Text("Hello, World!")) {}
                .opacity(0)
          ) 
于 2021-01-29T19:46:40.417 回答