NavigationView: basis, navigatiestapel in SwiftUI-applicaties

Auteur: IT Sectr Gepubliceerd: 2026-02-22 Leestijd: 6 min

NavigationView — een containercomponent van SwiftUI voor het organiseren van stapelnavigatie tussen schermen. NavigationView creëert een navigatiestapel met automatische balk, titel en «Terug»-knop. Vanaf iOS 16 raadt Apple aan om NavigationStack te gebruiken. Lees meer in de Apple-documentatie.

Belangrijkste punten

  • NavigationView — SwiftUI-container voor stapelnavigatie, creëert navigation bar en terug-knop
  • NavigationLink — element voor overgang naar een nieuw scherm binnen NavigationView
  • NavigationStack — opvolger van NavigationView (iOS 16+) met programmatisch stapelbeheer
  • .toolbar — modifier voor het toevoegen van knoppen aan de navigation bar
  • .navigationTitle — stelt de schermtitel in in large of inline-stijl

Wat is NavigationView?

NavigationView — een SwiftUI-container die een hiërarchie van schermen omvat en een navigatie-interface biedt. Binnen NavigationView werkt NavigationLink — een element dat bij indrukken het huidige scherm vervangt door een nieuw. NavigationView voegt automatisch een navigation bar met titel en «Terug»-knop toe.

NavigationView verscheen in iOS 13 samen met SwiftUI. Conceptueel vervangt het UINavigationController uit UIKit, maar is declaratief geïmplementeerd. In plaats van handmatig push/pop beschrijft de ontwikkelaar de verbinding tussen schermen via NavigationLink. Het systeem beheert automatisch de stapel.

NavigationView ondersteunt de modifiers .navigationTitle, .navigationBarTitleDisplayMode, .toolbar en .searchable. Voor iOS 16+ introduceerde Apple NavigationStack, dat de API van NavigationView behoudt, maar programmatisch stapelbeheer via NavigationPath toevoegt. Voor projecten die iOS 15 en ouder ondersteunen, blijft NavigationView de enige optie.

NavigationLink — een SwiftUI-element dat een overgang naar het doelscherm maakt binnen NavigationView of NavigationStack. Bij indrukken van NavigationLink voegt het systeem het doelscherm toe aan de navigatiestapel. De overgangsanimatie is een standaard push van rechts voor iOS, aangepast aan het platform.

swift
struct ContentView: View {
    var body: some View {
        NavigationView {
            List(items) { item in
                NavigationLink(destination: DetailView(item: item)) {
                    Text(item.title)
                }
            }
            .navigationTitle("Lijst")
        }
    }
}

struct DetailView: View {
    let item: Item

    var body: some View {
        VStack {
            Text(item.description)
                .navigationTitle(item.title)
                .navigationBarTitleDisplayMode(.inline)
        }
    }
}

NavigationLink accepteert twee parameters: destination — de doel-View, en label — het element waar de gebruiker op klikt. Voor lijsten is de syntaxis met value en NavigationLink(value:) handig, die automatisch de cel deselecteert en werkt met NavigationPath.

Sinds iOS 16 heeft Apple NavigationStack geïntroduceerd als vervanging voor NavigationView. NavigationStack behoudt de declaratieve syntaxis, maar voegt een kritieke mogelijkheid toe — programmatisch stapelbeheer via de eigenschap path van het type NavigationPath of een array van Hashable.

MogelijkheidNavigationView (iOS 13-15)NavigationStack (iOS 16+)
Programmatische pushNee, alleen via NavigationLinkJa, via path.append(value)
popToRootAlleen dismiss tot rootpath.removeLast(path.count)
Deep LinksComplexe implementatieIngebouwde ondersteuning via path
StapeltyperingNee (elke View in destination)Ja (array van Hashable-waarden)
SplitView iPadColumnStyle / StackStyleNavigationSplitView (iOS 16+)

Gebruik voor projecten met minimale iOS 16+ versie NavigationStack. Voor ondersteuning van iOS 14-15 — NavigationView. NavigationStack heeft geen directe analogen voor oude versies, dus upgrade vereist compatibiliteitscontrole.

Toolbar en navigationTitle-configuratie

De modifiers .toolbar en .navigationTitle beheren de inhoud van de navigatiebalk. .navigationTitle stelt de schermtitel in, .navigationBarTitleDisplayMode kiest de stijl: .large (groot, standaard) of .inline (compact, zoals in Instellingen). .toolbar voegt knoppen, zoekopdracht en gesegmenteerde controle toe.

swift
struct SettingsView: View {
    var body: some View {
        NavigationStack {
            Form {
                Section("Profiel") {
                    Text("Gebruikersnaam")
                    Toggle("Meldingen", isOn: $notifications)
                }
            }
            .navigationTitle("Instellingen")
            .navigationBarTitleDisplayMode(.large)
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing) {
                    Button("Opslaan") { save() }
                }
                ToolbarItem(placement: .navigationBarLeading) {
                    EditButton()
                }
            }
        }
    }
}

.searchable — nog een modifier die de zoekbalk in de navigation bar integreert. Werkt zowel met NavigationView als NavigationStack. Zoeken wordt automatisch verborgen tijdens scrollen en getoond bij naar beneden vegen. Ondersteunt lijstfiltering via Binding String.

Programmatische navigatie met NavigationPath

NavigationPath — een iOS 16+ type dat de navigatiestapel voorstelt als een verzameling Hashable-waarden. De ontwikkelaar voegt elementen toe aan path voor programmatische overgang, verwijdert ze voor terugkeer. NavigationPath ondersteunt diepe links, pushmeldingen en statusherstel.

swift
struct AppNavigation: View {
    @State private var path = NavigationPath()

    var body: some View {
        NavigationStack(path: $path) {
            List(categories) { category in
                NavigationLink("Categorie \(category.name)",
                               value: category)
            }
            .navigationTitle("Categorieën")
            .navigationDestination(for: Category.self) { category in
                ProductListView(category: category)
            }
            .navigationDestination(for: Product.self) { product in
                ProductDetailView(product: product)
            }
        }

        // Programmatische overgang via deep link
        .onOpenURL { url in
            guard let productId = DeepLinkParser.parse(url) else { return }
            path.append(Product(id: productId))
        }
    }
}

.navigationDestination(for:) registreert het gegevenstype waarvoor een scherm moet worden getoond. Wanneer een waarde van dit type aan path wordt toegevoegd, maakt het systeem automatisch de doel-View aan. Deze aanpak vervangt expliciete NavigationLink(destination:) en maakt navigatie strikt getypeerd.

NavigationView en NavigationStack werken op alle Apple-platforms: iOS, iPadOS, watchOS, tvOS en macOS. Het gedrag past zich aan het scherm aan. Op iPad ondersteunt NavigationStack NavigationSplitView, dat UISplitViewController uit UIKit vervangt en twee kolommen toont op een breed scherm.

NavigationSplitView (iOS 16+) verdeelt het scherm in sidebar (lijst) en detail (details). Op iPhone is de sidebar verborgen en wordt alleen detail getoond via NavigationLink. Op iPad worden sidebar en detail gelijktijdig getoond in split-modus.

swift
struct AdaptiveNavigation: View {
    @State private var selectedCategory: Category?

    var body: some View {
        NavigationSplitView {
            List(categories, selection: $selectedCategory) { category in
                Text(category.name)
            }
            .navigationTitle("Categorieën")
        } detail: {
            ProductListView(category: selectedCategory)
        }
    }
}

NavigationSplitView kiest automatisch de optimale weergavemodus voor elk apparaat. Op iPhone in portretmodus — stapel, op iPad en iPhone in landschapmodus — split. De ontwikkelaar hoeft geen aparte code te schrijven voor verschillende size classes.

Veelgestelde vragen

Wat is het verschil tussen NavigationView en NavigationStack?

NavigationView — oude API (iOS 13-15), ondersteunt alleen declaratieve NavigationLink. NavigationStack — nieuwe API (iOS 16+), voegt path toe voor programmatische navigatie, diepe links en een strikt getypeerde stapel. NavigationStack wordt door Apple aanbevolen voor nieuwe projecten.

Hoe voeg ik een knop toe aan de navigationBar?

Via de modifier .toolbar met ToolbarItem. Bijvoorbeeld: .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button('Instellingen') { } } }. Placement bepaalt de positie: trailing (rechts), leading (links), principal (midden).

Hoe stel ik de titel en de stijl ervan in?

De titel wordt ingesteld via .navigationTitle('Naam'). Stijl — .navigationBarTitleDisplayMode(.large) of .inline. Large — grote titel in iOS Music-stijl, inline — compact, zoals in Instellingen. De stijl kan voor elk scherm afzonderlijk worden gewijzigd.

Hoe geef ik gegevens door via NavigationLink?

Drie manieren: via value (NavigationLink(value:item) { Label }, iOS 16+), via destination + label, via isActive voor programmatische overgang. NavigationLink met value is schoner voor lijsten, omdat het geen doel-View vóór de overgang vereist.

Kan ik NavigationView gebruiken op watchOS en tvOS?

Ja. NavigationView en NavigationStack zijn beschikbaar op iOS, iPadOS, watchOS, tvOS en macOS. Op watchOS gebruikt navigatie de interface-hiërarchie met het Digital Crown-wiel, op tvOS — focusinvoer via de afstandsbediening. Het gedrag past zich automatisch aan het platform aan.

Samenvatting

  • NavigationView — SwiftUI-container voor stapelnavigatie met automatische navigation bar en «Terug»-knop
  • NavigationLink — primair overgangselement, ondersteunt declaratieve (destination) en value-based syntaxis
  • NavigationStack (iOS 16+) vervangt NavigationView en voegt programmatisch stapelbeheer via NavigationPath toe
  • .toolbar voegt knoppen toe aan navigation bar, .navigationTitle stelt titel in met large/inline-stijlkeuze
  • NavigationPath — strikt getypeerde stapel van Hashable-waarden voor programmatische navigatie en deep links
  • NavigationSplitView (iOS 16+) past de interface aan voor iPad en iPhone, kiest automatisch split of stapel
  • De keuze tussen NavigationView en NavigationStack wordt bepaald door de minimaal ondersteunde iOS-versie in het project

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook