首页 > 解决方案 > 如何使用 NavigationLink 在列表行中拥有其他可选区域?

问题描述

如果行视图中还有一个 NavigationLink,那么除了导航之外,我无法选择一行。这对 UIKit 来说没有问题。是因为目前缺乏实现而不可能,只是一个错误,还是实际上目前可能?

这可能是可以说明问题的最简单的片段。

struct ContentView: View {
  var body: some View {
    NavigationView {
      List {
        HStack {
          Button("How can I tap over here without transitioning?") { }
          NavigationLink( destination: ContentView() ) {
            Spacer()
          }
        }
      }
    }
  }
}

标签: swiftui

解决方案


您的按钮不应该是默认样式。

这是可能方法的简单演示。使用 Xcode 11.7 / iOS 13.7 准备和测试

演示

struct ContentView: View {
    @State private var selected = false
    var body: some View {
        NavigationView {
            List {
                HStack {
                    Button(action: { self.selected.toggle() }) {
                        Image(systemName: selected ? "checkmark.circle" : "circle")
                    }.buttonStyle(PlainButtonStyle())
                    .padding(.horizontal)

                    NavigationLink( destination: Text("Details") ) {
                        Text("Link")
                            .frame(maxWidth: .infinity, alignment: .leading)
                    }
                }
            }
        }
    }
}

推荐阅读