NavigationLink下に配置したButtonのタップが反応しない

SwiftUIでちょっと困ったこと。 Listの中にボタンを配置した時に意図通りにならなくてなんでかなーとなった。

こんな風に、ただボタンを置いただけのときは問題なかった。ボタンをタップすると action は実行される。

struct ContentView: View {
    let items = ["AAA", "BBB", "CCC"]
    
    var body: some View {
        NavigationView {
            List {
                ForEach(items, id: \.self) { item in
                    Button(action: {
                        print("Hello world!")  // 反応する!
                    }) {
                        Text(item)
                    }
                }
            }
            .navigationBarTitle("Test")
        }
    }
}

だけど、各行を NavigationLink で包むとボタンのタップに反応しなくなっちゃった。 (あと何故かボタンの色も黒くなってる。)

struct ContentView: View {
    let items = ["AAA", "BBB", "CCC"]
    
    var body: some View {
        NavigationView {
            List {
                ForEach(items, id: \.self) { item in
                    NavigationLink(destination: Text(item)) {
                        Button(action: {
                            print("Hello world!") // 反応しない!
                        }) {
                            Text(item)
                        }
                    }
                }
            }
            .navigationBarTitle("Test")
        }
    }
}

f:id:gibachan03:20191022163118p:plain

意図としては、ボタンをタップしたら action の中が実行され、ボタンの外側をタップしたら遷移するようにしたかった。

結局、 onTapGesture() でタップを検出するようにして解決(?)した。

Button(action: {
    print("Hello world!") // 反応しない!
}) {
    Text(item)
}
.onTapGesture {
    print("Hello world!") // これなら反応する!
}

環境: Xcode11.1, Swift5