NavigationView: βασικά, στοίβα πλοήγησης σε εφαρμογές SwiftUI

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-02-22 Χρόνος ανάγνωσης: 6 λεπ

NavigationView — ένα δοχείο (container) component του SwiftUI για την οργάνωση πλοήγησης στοίβας μεταξύ οθονών. Το NavigationView δημιουργεί μια στοίβα πλοήγησης με αυτόματη γραμμή, τίτλο και κουμπί «Πίσω». Από το iOS 16, η Apple συνιστά τη χρήση του NavigationStack. Διαβάστε περισσότερα στην τεκμηρίωση της Apple.

Κύρια σημεία

  • NavigationView — δοχείο SwiftUI για πλοήγηση στοίβας, δημιουργεί navigation bar και κουμπί πίσω
  • NavigationLink — στοιχείο μετάβασης σε νέα οθόνη εντός του NavigationView
  • NavigationStack — διάδοχος του NavigationView (iOS 16+) με προγραμματισμένη διαχείριση στοίβας
  • .toolbar — τροποποιητής για προσθήκη κουμπιών στο navigation bar
  • .navigationTitle — ορίζει τον τίτλο της οθόνης σε large ή inline στυλ

Τι είναι το NavigationView;

NavigationView — ένα δοχείο SwiftUI που περιβάλλει μια ιεραρχία οθονών και παρέχει μια διεπαφή πλοήγησης. Μέσα στο NavigationView λειτουργεί το NavigationLink — ένα στοιχείο που όταν πατηθεί αντικαθιστά την τρέχουσα οθόνη με μια νέα. Το NavigationView προσθέτει αυτόματα navigation bar με τίτλο και κουμπί «Πίσω».

Το NavigationView εμφανίστηκε στο iOS 13 μαζί με το SwiftUI. Εννοιολογικά αντικαθιστά το UINavigationController από το UIKit, αλλά υλοποιείται δηλωτικά. Αντί για χειροκίνητο push/pop, ο προγραμματιστής περιγράφει τη σύνδεση μεταξύ οθονών μέσω του NavigationLink. Το σύστημα διαχειρίζεται αυτόματα τη στοίβα.

NavigationView υποστηρίζει τους τροποποιητές .navigationTitle, .navigationBarTitleDisplayMode, .toolbar και .searchable. Για iOS 16+, η Apple εισήγαγε το NavigationStack, το οποίο διατηρεί το API του NavigationView αλλά προσθέτει προγραμματισμένη διαχείριση στοίβας μέσω του NavigationPath. Για έργα που υποστηρίζουν iOS 15 και παλαιότερα, το NavigationView παραμένει η μόνη επιλογή.

NavigationLink — ένα στοιχείο SwiftUI που δημιουργεί μετάβαση στην οθόνη-στόχο εντός του NavigationView ή του NavigationStack. Όταν πατηθεί το NavigationLink, το σύστημα προσθέτει την οθόνη-στόχο στη στοίβα πλοήγησης. Η κίνηση μετάβασης — τυπικό push από τα δεξιά για iOS, προσαρμόζεται στην πλατφόρμα.

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

struct DetailView: View {
    let item: Item

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

Το NavigationLink δέχεται δύο παραμέτρους: destination — το View-στόχος, και label — το στοιχείο στο οποίο κάνει κλικ ο χρήστης. Για λίστες, η σύνταξη με value και NavigationLink(value:) είναι βολική, η οποία αποεπιλέγει αυτόματα το κελί και λειτουργεί με το NavigationPath.

Από το iOS 16, η Apple παρουσίασε το NavigationStack ως αντικαταστάτη του NavigationView. Το NavigationStack διατηρεί τη δηλωτική σύνταξη, αλλά προσθέτει μια κρίσιμη δυνατότητα — προγραμματισμένη διαχείριση στοίβας μέσω της ιδιότητας path τύπου NavigationPath ή πίνακα Hashable.

ΔυνατότηταNavigationView (iOS 13-15)NavigationStack (iOS 16+)
Προγραμματισμένο pushΌχι, μόνο μέσω NavigationLinkΝαι, μέσω path.append(value)
popToRootΜόνο dismiss μέχρι rootpath.removeLast(path.count)
Deep LinksΠολύπλοκη υλοποίησηΕνσωματωμένη υποστήριξη μέσω path
Τυποποίηση στοίβαςΌχι (οποιοδήποτε View στο destination)Ναι (πίνακας Hashable τιμών)
SplitView iPadColumnStyle / StackStyleNavigationSplitView (iOS 16+)

Για έργα με ελάχιστη έκδοση iOS 16+ χρησιμοποιήστε NavigationStack. Για υποστήριξη iOS 14-15 — NavigationView. Το NavigationStack δεν έχει άμεσα ανάλογα για παλιές εκδόσεις, επομένως η αναβάθμιση απαιτεί έλεγχο συμβατότητας.

Toolbar και ρύθμιση navigationTitle

Οι τροποποιητές .toolbar και .navigationTitle διαχειρίζονται το περιεχόμενο της γραμμής πλοήγησης. Το .navigationTitle ορίζει τον τίτλο της οθόνης, το .navigationBarTitleDisplayMode επιλέγει στυλ: .large (μεγάλο, προεπιλογή) ή .inline (συμπαγές, όπως στις Ρυθμίσεις). Το .toolbar προσθέτει κουμπιά, αναζήτηση και τμηματικό έλεγχο.

swift
struct SettingsView: View {
    var body: some View {
        NavigationStack {
            Form {
                Section("Προφίλ") {
                    Text("Όνομα χρήστη")
                    Toggle("Ειδοποιήσεις", isOn: $notifications)
                }
            }
            .navigationTitle("Ρυθμίσεις")
            .navigationBarTitleDisplayMode(.large)
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing) {
                    Button("Αποθήκευση") { save() }
                }
                ToolbarItem(placement: .navigationBarLeading) {
                    EditButton()
                }
            }
        }
    }
}

.searchable — ένας ακόμη τροποποιητής που ενσωματώνει τη γραμμή αναζήτησης στο navigation bar. Λειτουργεί τόσο με NavigationView όσο και με NavigationStack. Η αναζήτηση κρύβεται αυτόματα κατά την κύλιση και εμφανίζεται με σάρωση προς τα κάτω. Υποστηρίζει φιλτράρισμα λίστας μέσω Binding String.

Προγραμματισμένη πλοήγηση με NavigationPath

NavigationPath — ένας τύπος iOS 16+ που αντιπροσωπεύει τη στοίβα πλοήγησης ως συλλογή Hashable τιμών. Ο προγραμματιστής προσθέτει στοιχεία στο path για προγραμματισμένη μετάβαση, τα αφαιρεί για επιστροφή. Το NavigationPath υποστηρίζει deep links, push ειδοποιήσεις και επαναφορά κατάστασης.

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

    var body: some View {
        NavigationStack(path: $path) {
            List(categories) { category in
                NavigationLink("Κατηγορία \(category.name)",
                               value: category)
            }
            .navigationTitle("Κατηγορίες")
            .navigationDestination(for: Category.self) { category in
                ProductListView(category: category)
            }
            .navigationDestination(for: Product.self) { product in
                ProductDetailView(product: product)
            }
        }

        // Προγραμματισμένη μετάβαση μέσω deep link
        .onOpenURL { url in
            guard let productId = DeepLinkParser.parse(url) else { return }
            path.append(Product(id: productId))
        }
    }
}

.navigationDestination(for:) καταχωρεί τον τύπο δεδομένων για τον οποίο πρέπει να εμφανιστεί μια οθόνη. Όταν μια τιμή αυτού του τύπου προστίθεται στο path, το σύστημα δημιουργεί αυτόματα το View-στόχο. Αυτή η προσέγγιση αντικαθιστά το ρητό NavigationLink(destination:) και καθιστά την πλοήγηση αυστηρά τυποποιημένη.

NavigationView και NavigationStack λειτουργούν σε όλες τις πλατφόρμες Apple: iOS, iPadOS, watchOS, tvOS και macOS. Η συμπεριφορά προσαρμόζεται στην οθόνη. Στο iPad, το NavigationStack υποστηρίζει το NavigationSplitView, το οποίο αντικαθιστά το UISplitViewController από το UIKit και εμφανίζει δύο στήλες σε ευρεία οθόνη.

Το NavigationSplitView (iOS 16+) χωρίζει την οθόνη σε sidebar (λίστα) και detail (λεπτομέρειες). Στο iPhone, το sidebar είναι κρυμμένο, εμφανίζοντας μόνο το detail μέσω NavigationLink. Στο iPad, το sidebar και το detail εμφανίζονται ταυτόχρονα σε λειτουργία split.

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

    var body: some View {
        NavigationSplitView {
            List(categories, selection: $selectedCategory) { category in
                Text(category.name)
            }
            .navigationTitle("Κατηγορίες")
        } detail: {
            ProductListView(category: selectedCategory)
        }
    }
}

Το NavigationSplitView επιλέγει αυτόματα τη βέλτιστη λειτουργία εμφάνισης για κάθε συσκευή. Στο iPhone σε κατακόρυφη λειτουργία — στοίβα, στο iPad και iPhone σε οριζόντια λειτουργία — split. Ο προγραμματιστής δεν χρειάζεται να γράψει ξεχωριστό κώδικα για διαφορετικά size class.

Συχνές ερωτήσεις

Ποια είναι η διαφορά μεταξύ NavigationView και NavigationStack;

NavigationView — παλιό API (iOS 13-15), υποστηρίζει μόνο δηλωτικά NavigationLink. NavigationStack — νέο API (iOS 16+), προσθέτει path για προγραμματισμένη πλοήγηση, deep links και αυστηρά τυποποιημένη στοίβα. Το NavigationStack συνιστάται από την Apple για νέα έργα.

Πώς προσθέτω ένα κουμπί στο navigationBar;

Μέσω του τροποποιητή .toolbar με ToolbarItem. Για παράδειγμα: .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button('Ρυθμίσεις') { } } }. Το Placement καθορίζει τη θέση: trailing (δεξιά), leading (αριστερά), principal (κέντρο).

Πώς ρυθμίζω τον τίτλο και το στυλ του;

Ο τίτλος ορίζεται μέσω .navigationTitle('Όνομα'). Στυλ — .navigationBarTitleDisplayMode(.large) ή .inline. Large — μεγάλος τίτλος σε στυλ iOS Music, inline — συμπαγής, όπως στις Ρυθμίσεις. Το στυλ μπορεί να αλλάξει για κάθε οθόνη ξεχωριστά.

Πώς μεταφέρω δεδομένα μέσω NavigationLink;

Τρεις τρόποι: μέσω value (NavigationLink(value:item) { Label }, iOS 16+), μέσω destination + label, μέσω isActive για προγραμματισμένη μετάβαση. Το NavigationLink με value είναι πιο καθαρό για λίστες, καθώς δεν απαιτεί τη δημιουργία του View-στόχου πριν από τη μετάβαση.

Μπορώ να χρησιμοποιήσω το NavigationView σε watchOS και tvOS;

Ναι. NavigationView και NavigationStack είναι διαθέσιμα σε iOS, iPadOS, watchOS, tvOS και macOS. Στο watchOS, η πλοήγηση χρησιμοποιεί ιεραρχία διεπαφής με τον τροχό Digital Crown, στο tvOS — είσοδο εστίασης από το τηλεχειριστήριο. Η συμπεριφορά προσαρμόζεται αυτόματα στην πλατφόρμα.

Σύνοψη

  • NavigationView — δοχείο SwiftUI για πλοήγηση στοίβας με αυτόματο navigation bar και κουμπί «Πίσω»
  • NavigationLink — κύριο στοιχείο μετάβασης, υποστηρίζει δηλωτική (destination) και value-based σύνταξη
  • NavigationStack (iOS 16+) αντικαθιστά το NavigationView, προσθέτοντας προγραμματισμένη διαχείριση στοίβας μέσω NavigationPath
  • .toolbar προσθέτει κουμπιά στο navigation bar, .navigationTitle ορίζει τίτλο με επιλογή στυλ large/inline
  • NavigationPath — αυστηρά τυποποιημένη στοίβα Hashable τιμών για προγραμματισμένη πλοήγηση και deep links
  • NavigationSplitView (iOS 16+) προσαρμόζει τη διεπαφή για iPad και iPhone, επιλέγοντας αυτόματα split ή στοίβα
  • Η επιλογή μεταξύ NavigationView και NavigationStack καθορίζεται από την ελάχιστη υποστηριζόμενη έκδοση iOS στο έργο

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης