SwiftUI Navigation Stack verstehen
Wie NavigationStack und NavigationPath die App-Navigation in SwiftUI vereinfachen.
Navigation in SwiftUI – der moderne Weg
Seit iOS 16 bietet SwiftUI mit NavigationStack eine deutlich flexiblere Alternative zu NavigationView. Hier zeige ich, wie man damit arbeitet.
NavigationStack Basics
Der einfachste Einstieg:
NavigationStack {
List(items) { item in
NavigationLink(item.name, value: item)
}
.navigationDestination(for: Item.self) { item in
DetailView(item: item)
}
}Der grosse Vorteil gegenueber dem alten NavigationLink(destination:): Die Navigation ist datengetrieben statt view-getrieben.
NavigationPath fuer programmatische Navigation
Mit NavigationPath kann man den Navigation-Stack programmatisch steuern:
@State private var path = NavigationPath()
NavigationStack(path: $path) {
Button("Go to Detail") {
path.append(myItem)
}
.navigationDestination(for: Item.self) { item in
DetailView(item: item)
}
}
Das ermoeglicht:
- Deep Linking – Navigation direkt zu einer bestimmten Seite
- Pop to Root – Zurueck zum Anfang mit
path.removeLast(path.count) - State Restoration – NavigationPath ist Codable
Mehrere Zieltypen
Man kann verschiedene Datentypen als Navigation-Ziele registrieren:
NavigationStack(path: $path) {
ContentView()
.navigationDestination(for: User.self) { user in
UserView(user: user)
}
.navigationDestination(for: Settings.self) { settings in
SettingsView(settings: settings)
}
}Fazit
NavigationStack ist der richtige Weg fuer neue SwiftUI-Projekte. Die datengetriebene Navigation macht den Code sauberer und ermoeglicht Features wie Deep Linking ohne grossen Aufwand.