Posted at

[SwiftUI]NavigationLinkのアクセサリを非表示にするには

SwiftUIでは、画面遷移の方法としてNavigationLinkと呼ばれる機能が存在します。

これは、遷移後のViewと表示するViewを指定することでpush遷移を提供するviewです。

NavigationLinkは以下のように、Listの中で使うこともできます。


struct ContentView: View {
var body: some View {
NavigationView {
List {
Text("cat")
Text("dog")
NavigationLink(destination: Text("detail")) {
Text("fox")
}
}
}
}
}

しかし、Listの中でNavigationLinkを利用すると自動的に矢印のアクセサリ(UIKitで言うUITableViewCell.AccessoryType.detailDisclosureButton)が表示されます。

スクリーンショット 2019-10-12 22.29.50.png

これを非表示にするには、以下のようにStackの中でNavigationLinkと表示Viewを入れてNavigationLinkではEmptyViewを返すようにします。


struct ContentView: View {
var body: some View {
NavigationView {
List {
Text("cat")
Text("dog")
HStack {
Text("fox")
NavigationLink(destination: Text("detail")) {
EmptyView()
}
}
}
}
}
}

レイアウトによってはVStackとHStackを使い分ける必要があるかと思います。