iOS16から使えるNavigationStackですが勝手にルートに戻る場合がありました。
基本的には問題ありませんが、初心者が戸惑う場合や、NavigationViewを無理やり使っていたものを置き換えると起こる場合があるのでメモを残しておきます。
問題のコード
勝手に戻るコード(ミスのあるコード)
struct ContentView: View {
var body: some View {
NavigationStack{
List{
NavigationLink("Test", destination: DestinationView())
}
}
}
}
struct DestinationView: View {
var body: some View {
NavigationStack{
List{
Text("Test")
}
}
}
}
遷移先にもNavigationStackがあります。
本来NavigationStackは遷移元の1つだけ良く、NavigationLinkで繰り返し遷移しても複数使用することはありません。
※Sheetなどで元のNavigationStackから離れた際は別途必要になります。
正しく使用出来ていれば何の問題もありませんが初心者の頃はありがちなミスです。
NavigationViewではレイアウトが崩れるものの遷移自体はできていました。
正常なコード
struct ContentView: View {
var body: some View {
NavigationStack{
List{
NavigationLink("Test", destination: DestinationView())
}
}
}
}
struct DestinationView: View {
var body: some View {
//NavigationStack{
List{
Text("Test")
}
//}
}
}
遷移後からNavigationStackを無くしました。
これが正しい使い方になります。
コメント