NavigationView: alapok, navigációs verem SwiftUI alkalmazásokban

Szerző: IT Sectr Megjelenés: 2026-02-22 Olvasási idő: 6 perc

NavigationView — egy SwiftUI konténer komponens a verem alapú navigáció megszervezéséhez a képernyők között. A NavigationView navigációs vermet hoz létre automatikus sávval, címmel és «Vissza» gombbal. Az iOS 16-tól kezdve az Apple a NavigationStack használatát javasolja. További részletek az Apple dokumentációjában.

Főbb pontok

  • NavigationView — SwiftUI konténer verem alapú navigációhoz, navigation bar-t és vissza gombot hoz létre
  • NavigationLink — elem az új képernyőre való átmenethez a NavigationView-n belül
  • NavigationStack — a NavigationView utódja (iOS 16+), programozott veremkezeléssel
  • .toolbar — módosító gombok hozzáadásához a navigation bar-hoz
  • .navigationTitle — beállítja a képernyő címét large vagy inline stílusban

Mi az a NavigationView?

NavigationView — egy SwiftUI konténer, amely beburkolja a képernyők hierarchiáját és navigációs felületet biztosít. A NavigationView-n belül a NavigationLink működik — egy elem, amely megnyomásakor az aktuális képernyőt egy újra cseréli. A NavigationView automatikusan hozzáad egy navigation bar-t címmel és «Vissza» gombbal.

A NavigationView az iOS 13-ban jelent meg a SwiftUI-val együtt. Fogalmilag helyettesíti az UIKit-ből származó UINavigationController-t, de deklaratív módon van implementálva. A kézi push/pop helyett a fejlesztő a NavigationLink segítségével írja le a képernyők közötti kapcsolatot. A rendszer automatikusan kezeli a vermet.

NavigationView támogatja a .navigationTitle, .navigationBarTitleDisplayMode, .toolbar és .searchable módosítókat. Az iOS 16+ számára az Apple bevezette a NavigationStack-et, amely megtartja a NavigationView API-ját, de programozott veremkezelést ad hozzá a NavigationPath segítségével. Az iOS 15-öt és régebbit támogató projektek számára a NavigationView marad az egyetlen lehetőség.

NavigationLink — egy SwiftUI elem, amely átmenetet hoz létre a célképernyőre a NavigationView vagy NavigationStack belsejében. A NavigationLink megnyomásakor a rendszer hozzáadja a célképernyőt a navigációs veremhez. Az átmenet animációja — szabványos push jobbról iOS esetén, alkalmazkodik a platformhoz.

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

struct DetailView: View {
    let item: Item

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

A NavigationLink két paramétert fogad: destination — a cél View, és label — az elem, amelyre a felhasználó kattint. Listák esetén a value és NavigationLink(value:) szintaxis kényelmes, amely automatikusan kijelöli a cellát és együttműködik a NavigationPath-pal.

Az iOS 16-tól kezdve az Apple bemutatta a NavigationStack-et a NavigationView helyettesítőjeként. A NavigationStack megtartja a deklaratív szintaxist, de hozzáad egy kritikus képességet — a verem programozott kezelését a NavigationPath típusú path tulajdonság vagy egy Hashable tömb segítségével.

KépességNavigationView (iOS 13-15)NavigationStack (iOS 16+)
Programozott pushNem, csak NavigationLink segítségévelIgen, path.append(value) segítségével
popToRootCsak dismiss a root-igpath.removeLast(path.count)
Deep LinkekBonyolult implementációBeépített támogatás a path segítségével
Verem tipizálásaNem (bármilyen View a destination-ben)Igen (Hashable értékek tömbje)
SplitView iPadColumnStyle / StackStyleNavigationSplitView (iOS 16+)

Az iOS 16+ minimális verziójú projektekhez használja a NavigationStack-et. Az iOS 14-15 támogatásához — NavigationView. A NavigationStack-nek nincs közvetlen analógja a régi verziókhoz, ezért a frissítés kompatibilitási ellenőrzést igényel.

Toolbar és navigationTitle beállítása

A .toolbar és .navigationTitle módosítók kezelik a navigációs sáv tartalmát. A .navigationTitle beállítja a képernyő címét, a .navigationBarTitleDisplayMode kiválasztja a stílust: .large (nagy, alapértelmezett) vagy .inline (kompakt, mint a Beállításokban). A .toolbar gombokat, keresést és szegmentált vezérlést ad hozzá.

swift
struct SettingsView: View {
    var body: some View {
        NavigationStack {
            Form {
                Section("Profil") {
                    Text("Felhasználónév")
                    Toggle("Értesítések", isOn: $notifications)
                }
            }
            .navigationTitle("Beállítások")
            .navigationBarTitleDisplayMode(.large)
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing) {
                    Button("Mentés") { save() }
                }
                ToolbarItem(placement: .navigationBarLeading) {
                    EditButton()
                }
            }
        }
    }
}

.searchable — egy másik módosító, amely integrálja a keresősávot a navigation bar-ba. Mind a NavigationView-val, mind a NavigationStack-kel működik. A keresés automatikusan elrejtőzik görgetéskor és megjelenik lefelé húzáskor. Támogatja a lista szűrését Binding String segítségével.

Programozott navigáció NavigationPath segítségével

NavigationPath — egy iOS 16+ típus, amely a navigációs vermet Hashable értékek gyűjteményeként reprezentálja. A fejlesztő elemeket ad hozzá a path-hoz a programozott átmenethez, eltávolítja őket a visszatéréshez. A NavigationPath támogatja a mély linkeket, push értesítéseket és állapot-visszaállítást.

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

    var body: some View {
        NavigationStack(path: $path) {
            List(categories) { category in
                NavigationLink("Kategória \(category.name)",
                               value: category)
            }
            .navigationTitle("Kategóriák")
            .navigationDestination(for: Category.self) { category in
                ProductListView(category: category)
            }
            .navigationDestination(for: Product.self) { product in
                ProductDetailView(product: product)
            }
        }

        // Programozott átmenet deep link segítségével
        .onOpenURL { url in
            guard let productId = DeepLinkParser.parse(url) else { return }
            path.append(Product(id: productId))
        }
    }
}

.navigationDestination(for:) regisztrálja az adattípust, amelyhez meg kell jeleníteni egy képernyőt. Amikor egy ilyen típusú érték kerül a path-ba, a rendszer automatikusan létrehozza a cél View-t. Ez a megközelítés helyettesíti az explicit NavigationLink(destination:) hívást és szigorúan tipizált navigációt tesz lehetővé.

NavigationView és NavigationStack az összes Apple platformon működik: iOS, iPadOS, watchOS, tvOS és macOS. A viselkedés alkalmazkodik a képernyőhöz. iPad-en a NavigationStack támogatja a NavigationSplitView-t, amely helyettesíti az UIKit-ből származó UISplitViewController-t és két oszlopot jelenít meg széles képernyőn.

A NavigationSplitView (iOS 16+) felosztja a képernyőt sidebar-ra (lista) és detail-re (részletek). iPhone-on a sidebar el van rejtve, csak a detail jelenik meg a NavigationLink segítségével. iPad-en a sidebar és a detail egyszerre jelenik meg split módban.

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

    var body: some View {
        NavigationSplitView {
            List(categories, selection: $selectedCategory) { category in
                Text(category.name)
            }
            .navigationTitle("Kategóriák")
        } detail: {
            ProductListView(category: selectedCategory)
        }
    }
}

A NavigationSplitView automatikusan kiválasztja az optimális megjelenítési módot minden eszközhöz. iPhone-on portré módban — verem, iPad-en és iPhone-on fekvő módban — split. A fejlesztőnek nem kell külön kódot írnia a különböző size class-okhoz.

Gyakran ismételt kérdések

Mi a különbség a NavigationView és a NavigationStack között?

NavigationView — régi API (iOS 13-15), csak deklaratív NavigationLink-eket támogat. NavigationStack — új API (iOS 16+), path hozzáadásával programozott navigációt, mély linkeket és szigorúan tipizált vermet tesz lehetővé. A NavigationStack-et az Apple ajánlja új projektekhez.

Hogyan adhatok hozzá gombot a navigationBar-hoz?

A .toolbar módosítóval ToolbarItem segítségével. Például: .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button('Beállítások') { } } }. A Placement meghatározza a pozíciót: trailing (jobbra), leading (balra), principal (középre).

Hogyan állítsam be a címet és stílusát?

A cím a .navigationTitle('Név') segítségével állítható be. Stílus — .navigationBarTitleDisplayMode(.large) vagy .inline. Large — nagy cím iOS Music stílusban, inline — kompakt, mint a Beállításokban. A stílus minden képernyőhöz külön megváltoztatható.

Hogyan továbbíthatok adatokat NavigationLink segítségével?

Három mód: value segítségével (NavigationLink(value:item) { Label }, iOS 16+), destination + label segítségével, isActive segítségével programozott átmenethez. A NavigationLink value-val tisztább a listákhoz, mivel nem igényli a cél View létrehozását az átmenet előtt.

Használható a NavigationView watchOS és tvOS rendszeren?

Igen. A NavigationView és NavigationStack elérhető iOS, iPadOS, watchOS, tvOS és macOS rendszeren. WatchOS-en a navigáció a felület hierarchiáját használja a Digital Crown kerékkel, tvOS-en — fókusz bemenetet a távirányítóról. A viselkedés automatikusan alkalmazkodik a platformhoz.

Összefoglalás

  • NavigationView — SwiftUI konténer verem alapú navigációhoz automatikus navigation bar-ral és «Vissza» gombbal
  • NavigationLink — fő átmeneti elem, támogatja a deklaratív (destination) és value-based szintaxist
  • NavigationStack (iOS 16+) helyettesíti a NavigationView-t, programozott veremkezelést adva hozzá a NavigationPath segítségével
  • .toolbar gombokat ad a navigation bar-hoz, .navigationTitle beállítja a címet large/inline stílusválasztással
  • NavigationPath — szigorúan tipizált Hashable értékek verme programozott navigációhoz és deep linkekhez
  • NavigationSplitView (iOS 16+) adaptálja a felületet iPad-hez és iPhone-hoz, automatikusan split vagy vermet választva
  • A NavigationView és NavigationStack közötti választást a projektben támogatott minimális iOS verzió határozza meg

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is