NavigationView: dasar, tumpukan navigasi di aplikasi SwiftUI

Penulis: IT Sectr Diterbitkan: 2026-02-22 Waktu membaca: 6 mnt

NavigationView — komponen kontainer SwiftUI untuk mengatur navigasi bertumpuk antar layar. NavigationView membuat tumpukan navigasi dengan bilah otomatis, judul, dan tombol «Kembali». Mulai iOS 16, Apple merekomendasikan penggunaan NavigationStack. Baca selengkapnya di dokumentasi Apple.

Poin utama

  • NavigationView — kontainer SwiftUI untuk navigasi bertumpuk, membuat navigation bar dan tombol kembali
  • NavigationLink — elemen transisi ke layar baru di dalam NavigationView
  • NavigationStack — penerus NavigationView (iOS 16+) dengan manajemen tumpukan terprogram
  • .toolbar — modifier untuk menambahkan tombol ke navigation bar
  • .navigationTitle — mengatur judul layar dalam gaya large atau inline

Apa itu NavigationView?

NavigationView — kontainer SwiftUI yang membungkus hierarki layar dan menyediakan antarmuka navigasi. Di dalam NavigationView bekerja NavigationLink — elemen yang saat ditekan mengganti layar saat ini dengan yang baru. NavigationView secara otomatis menambahkan navigation bar dengan judul dan tombol «Kembali».

NavigationView muncul di iOS 13 bersama SwiftUI. Secara konseptual menggantikan UINavigationController dari UIKit, tetapi diimplementasikan secara deklaratif. Alih-alih push/pop manual, pengembang mendeskripsikan hubungan antar layar melalui NavigationLink. Sistem secara otomatis mengelola tumpukan.

NavigationView mendukung modifier .navigationTitle, .navigationBarTitleDisplayMode, .toolbar dan .searchable. Untuk iOS 16+ Apple memperkenalkan NavigationStack, yang mempertahankan API NavigationView tetapi menambahkan manajemen tumpukan terprogram melalui NavigationPath. Untuk proyek yang mendukung iOS 15 dan lebih lama, NavigationView tetap menjadi satu-satunya pilihan.

NavigationLink — elemen SwiftUI yang membuat transisi ke layar tujuan di dalam NavigationView atau NavigationStack. Saat NavigationLink ditekan, sistem menambahkan layar tujuan ke tumpukan navigasi. Animasi transisi — push standar dari kanan untuk iOS, disesuaikan dengan platform.

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

struct DetailView: View {
    let item: Item

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

NavigationLink menerima dua parameter: destination — View tujuan, dan label — elemen yang diklik pengguna. Untuk daftar, sintaksis dengan value dan NavigationLink(value:) nyaman, yang secara otomatis membatalkan pilihan sel dan bekerja dengan NavigationPath.

Sejak iOS 16, Apple memperkenalkan NavigationStack sebagai pengganti NavigationView. NavigationStack mempertahankan sintaksis deklaratif, tetapi menambahkan kemampuan kritis — manajemen tumpukan terprogram melalui properti path bertipe NavigationPath atau array Hashable.

KemampuanNavigationView (iOS 13-15)NavigationStack (iOS 16+)
Push terprogramTidak, hanya melalui NavigationLinkYa, melalui path.append(value)
popToRootHanya dismiss sampai rootpath.removeLast(path.count)
Deep LinksImplementasi rumitDukungan bawaan melalui path
Tipisasi tumpukanTidak (View apa pun di destination)Ya (array nilai Hashable)
SplitView iPadColumnStyle / StackStyleNavigationSplitView (iOS 16+)

Untuk proyek dengan versi minimum iOS 16+ gunakan NavigationStack. Untuk dukungan iOS 14-15 — NavigationView. NavigationStack tidak memiliki analog langsung untuk versi lama, sehingga upgrade memerlukan pemeriksaan kompatibilitas.

Toolbar dan konfigurasi navigationTitle

Modifier .toolbar dan .navigationTitle mengelola konten bilah navigasi. .navigationTitle mengatur judul layar, .navigationBarTitleDisplayMode memilih gaya: .large (besar, default) atau .inline (kompak, seperti di Pengaturan). .toolbar menambahkan tombol, pencarian, dan kontrol tersegmentasi.

swift
struct SettingsView: View {
    var body: some View {
        NavigationStack {
            Form {
                Section("Profil") {
                    Text("Nama pengguna")
                    Toggle("Notifikasi", isOn: $notifications)
                }
            }
            .navigationTitle("Pengaturan")
            .navigationBarTitleDisplayMode(.large)
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing) {
                    Button("Simpan") { save() }
                }
                ToolbarItem(placement: .navigationBarLeading) {
                    EditButton()
                }
            }
        }
    }
}

.searchable — modifier lain yang mengintegrasikan bilah pencarian ke navigation bar. Bekerja baik dengan NavigationView maupun NavigationStack. Pencarian secara otomatis tersembunyi saat menggulir dan muncul saat menggeser ke bawah. Mendukung pemfilteran daftar melalui Binding String.

Navigasi terprogram dengan NavigationPath

NavigationPath — tipe iOS 16+ yang merepresentasikan tumpukan navigasi sebagai kumpulan nilai Hashable. Pengembang menambahkan elemen ke path untuk transisi terprogram, menghapusnya untuk kembali. NavigationPath mendukung tautan dalam, notifikasi push, dan pemulihan status.

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

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

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

.navigationDestination(for:) mendaftarkan tipe data yang akan menampilkan layar. Ketika nilai dari tipe ini ditambahkan ke path, sistem secara otomatis membuat View tujuan. Pendekatan ini menggantikan NavigationLink(destination:) eksplisit dan membuat navigasi menjadi sangat tipis.

NavigationView dan NavigationStack bekerja di semua platform Apple: iOS, iPadOS, watchOS, tvOS dan macOS. Perilaku menyesuaikan dengan layar. Di iPad, NavigationStack mendukung NavigationSplitView, yang menggantikan UISplitViewController dari UIKit dan menampilkan dua kolom di layar lebar.

NavigationSplitView (iOS 16+) membagi layar menjadi sidebar (daftar) dan detail (rincian). Di iPhone, sidebar tersembunyi, hanya menampilkan detail melalui NavigationLink. Di iPad, sidebar dan detail ditampilkan secara bersamaan dalam mode 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("Kategori")
        } detail: {
            ProductListView(category: selectedCategory)
        }
    }
}

NavigationSplitView secara otomatis memilih mode tampilan optimal untuk setiap perangkat. Di iPhone dalam mode potret — tumpukan, di iPad dan iPhone dalam mode lanskap — split. Pengembang tidak perlu menulis kode terpisah untuk size class yang berbeda.

Pertanyaan yang sering diajukan

Apa perbedaan antara NavigationView dan NavigationStack?

NavigationView — API lama (iOS 13-15), hanya mendukung NavigationLink deklaratif. NavigationStack — API baru (iOS 16+), menambahkan path untuk navigasi terprogram, tautan dalam, dan tumpukan yang sangat tipis. NavigationStack direkomendasikan oleh Apple untuk proyek baru.

Bagaimana cara menambahkan tombol ke navigationBar?

Melalui modifier .toolbar dengan ToolbarItem. Contoh: .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button('Pengaturan') { } } }. Placement menentukan posisi: trailing (kanan), leading (kiri), principal (tengah).

Bagaimana cara mengatur judul dan gayanya?

Judul diatur melalui .navigationTitle('Nama'). Gaya — .navigationBarTitleDisplayMode(.large) atau .inline. Large — judul besar bergaya iOS Music, inline — kompak seperti di Pengaturan. Gaya dapat diubah untuk setiap layar secara terpisah.

Bagaimana cara mentransfer data melalui NavigationLink?

Tiga cara: melalui value (NavigationLink(value:item) { Label }, iOS 16+), melalui destination + label, melalui isActive untuk transisi terprogram. NavigationLink dengan value lebih bersih untuk daftar karena tidak memerlukan pembuatan View tujuan sebelum transisi.

Bisakah NavigationView digunakan di watchOS dan tvOS?

Ya. NavigationView dan NavigationStack tersedia di iOS, iPadOS, watchOS, tvOS dan macOS. Di watchOS, navigasi menggunakan hierarki antarmuka dengan roda Digital Crown, di tvOS — input fokus dari remote. Perilaku menyesuaikan secara otomatis dengan platform.

Ringkasan

  • NavigationView — kontainer SwiftUI untuk navigasi bertumpuk dengan navigation bar otomatis dan tombol «Kembali»
  • NavigationLink — elemen transisi utama, mendukung sintaksis deklaratif (destination) dan value-based
  • NavigationStack (iOS 16+) menggantikan NavigationView, menambahkan manajemen tumpukan terprogram melalui NavigationPath
  • .toolbar menambahkan tombol ke navigation bar, .navigationTitle mengatur judul dengan pilihan gaya large/inline
  • NavigationPath — tumpukan nilai Hashable yang sangat tipis untuk navigasi terprogram dan deep links
  • NavigationSplitView (iOS 16+) menyesuaikan antarmuka untuk iPad dan iPhone, secara otomatis memilih split atau tumpukan
  • Pilihan antara NavigationView dan NavigationStack ditentukan oleh versi iOS minimum yang didukung dalam proyek

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga