NavigationView: asoslari, SwiftUI ilovalarida navigatsiya steki

Muallif: IT Sectr Nashr etilgan: 2026-02-22 O'qish vaqti: 6 daq

NavigationView — SwiftUI ning ekranlar o'rtasida stek navigatsiyasini tashkil qilish uchun konteyner komponenti. NavigationView avtomatik panel, sarlavha va «Orqaga» tugmasi bilan navigatsiya stekini yaratadi. iOS 16 dan boshlab Apple NavigationStack dan foydalanishni tavsiya qiladi. Batafsil Apple hujjatlarida o'qing.

Asosiy ma'lumotlar

  • NavigationView — SwiftUI stek navigatsiyasi uchun konteyner, navigation bar va orqaga tugmasini yaratadi
  • NavigationLink — NavigationView ichida yangi ekranga o'tish elementi
  • NavigationStack — NavigationView ning vorisi (iOS 16+), dasturiy stek boshqaruvi bilan
  • .toolbar — navigation bar ga tugmalar qo'shish uchun modifier
  • .navigationTitle — ekran sarlavhasini large yoki inline uslubida o'rnatadi

NavigationView nima?

NavigationView — SwiftUI konteyneri, ekranlar iyerarxiyasini o'rab oladi va navigatsiya interfeysini taqdim etadi. NavigationView ichida NavigationLink ishlaydi — bosilganda joriy ekranni yangisi bilan almashtiradigan element. NavigationView avtomatik ravishda sarlavha va «Orqaga» tugmasi bilan navigation bar qo'shadi.

NavigationView iOS 13 da SwiftUI bilan birga paydo bo'ldi. Konseptual jihatdan UIKit dan UINavigationController ni almashtiradi, ammo deklarativ tarzda amalga oshirilgan. Qo'lda push/pop o'rniga, dasturchi NavigationLink orqali ekranlar o'rtasidagi bog'lanishni tavsiflaydi. Tizim avtomatik ravishda stekni boshqaradi.

NavigationView .navigationTitle, .navigationBarTitleDisplayMode, .toolbar va .searchable modifierlarini qo'llab-quvvatlaydi. iOS 16+ uchun Apple NavigationStack ni taqdim etdi, u NavigationView API sini saqlaydi, lekin NavigationPath orqali dasturiy stek boshqaruvini qo'shadi. iOS 15 va undan eski versiyalarini qo'llab-quvvatlaydigan loyihalar uchun NavigationView yagona variant bo'lib qoladi.

NavigationLink — NavigationView yoki NavigationStack ichida maqsadli ekranga o'tish yaratadigan SwiftUI elementi. NavigationLink bosilganda tizim maqsadli ekranni navigatsiya stekiga qo'shadi. O'tish animatsiyasi — iOS uchun standart o'ngdan push, platformaga moslashadi.

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

struct DetailView: View {
    let item: Item

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

NavigationLink ikki parametrni qabul qiladi: destination — maqsadli View, va label — foydalanuvchi bosadigan element. Ro'yxatlar uchun value va NavigationLink(value:) bilan sintaksis qulay, u avtomatik ravishda katakchani tanlovdan chiqaradi va NavigationPath bilan ishlaydi.

iOS 16 dan boshlab Apple NavigationStack ni NavigationView ning o'rnini bosuvchi sifatida taqdim etdi. NavigationStack deklarativ sintaksisni saqlaydi, lekin muhim imkoniyat qo'shadi — NavigationPath turidagi path xususiyati yoki Hashable massivi orqali dasturiy stek boshqaruvi.

ImkoniyatNavigationView (iOS 13-15)NavigationStack (iOS 16+)
Dasturiy pushYo'q, faqat NavigationLink orqaliHa, path.append(value) orqali
popToRootFaqat root gacha dismisspath.removeLast(path.count)
Deep LinksMurakkab tatbiqO'rnatilgan qo'llab-quvvatlash path orqali
Stek tipizatsiyasiYo'q (destination da istalgan View)Ha (Hashable qiymatlar massivi)
iPad SplitViewColumnStyle / StackStyleNavigationSplitView (iOS 16+)

Minimal iOS 16+ versiyasi bo'lgan loyihalar uchun NavigationStack dan foydalaning. iOS 14-15 qo'llab-quvvatlash uchun — NavigationView. NavigationStack ning eski versiyalar uchun to'g'ridan-to'g'ri analogi yo'q, shuning uchun yangilash moslikni tekshirishni talab qiladi.

Toolbar va navigationTitle sozlamasi

.toolbar va .navigationTitle modifierlari navigatsiya panelining mazmunini boshqaradi. .navigationTitle ekran sarlavhasini o'rnatadi, .navigationBarTitleDisplayMode uslubni tanlaydi: .large (katta, standart) yoki .inline (ixcham, Sozlamalardagi kabi). .toolbar tugmalar, qidiruv va segmentli boshqaruv qo'shadi.

swift
struct SettingsView: View {
    var body: some View {
        NavigationStack {
            Form {
                Section("Profil") {
                    Text("Foydalanuvchi nomi")
                    Toggle("Bildirishnomalar", isOn: $notifications)
                }
            }
            .navigationTitle("Sozlamalar")
            .navigationBarTitleDisplayMode(.large)
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing) {
                    Button("Saqlash") { save() }
                }
                ToolbarItem(placement: .navigationBarLeading) {
                    EditButton()
                }
            }
        }
    }
}

.searchable — navigation bar ga qidiruv satrini integratsiya qiladigan yana bir modifier. Ham NavigationView, ham NavigationStack bilan ishlaydi. Qidiruv skrollash paytida avtomatik yashirinadi va pastga surishda ko'rinadi. Binding String orqali ro'yxat filtrlashni qo'llab-quvvatlaydi.

NavigationPath bilan dasturiy navigatsiya

NavigationPath — iOS 16+ tipi, navigatsiya stekini Hashable qiymatlar kolleksiyasi sifatida ifodalaydi. Dasturchi dasturiy o'tish uchun path ga elementlar qo'shadi, qaytish uchun olib tashlaydi. NavigationPath chuqur havolalar, push bildirishnomalari va holatni tiklashni qo'llab-quvvatlaydi.

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

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

        // Deep link orqali dasturiy o'tish
        .onOpenURL { url in
            guard let productId = DeepLinkParser.parse(url) else { return }
            path.append(Product(id: productId))
        }
    }
}

.navigationDestination(for:) ekran ko'rsatilishi kerak bo'lgan ma'lumot turini ro'yxatdan o'tkazadi. Path ga ushbu turning qiymati qo'shilganda, tizim avtomatik maqsadli View yaratadi. Bu yondashuv aniq NavigationLink(destination:) ni almashtiradi va navigatsiyani qat'iy tipizatsiya qiladi.

NavigationView va NavigationStack barcha Apple platformalarida ishlaydi: iOS, iPadOS, watchOS, tvOS va macOS. Xatti-harakat ekranga moslashadi. iPad da NavigationStack UIKit dan UISplitViewController ni almashtiradigan NavigationSplitView ni qo'llab-quvvatlaydi va keng ekranda ikki ustun ko'rsatadi.

NavigationSplitView (iOS 16+) ekranni sidebar (ro'yxat) va detail (tafsilotlar) ga ajratadi. iPhone da sidebar yashirin, faqat NavigationLink orqali detail ko'rsatiladi. iPad da sidebar va detail split rejimida bir vaqtda ko'rsatiladi.

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

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

NavigationSplitView har bir qurilma uchun optimal ko'rsatish rejimini avtomatik tanlaydi. iPhone da portret rejimida — stek, iPad va iPhone da landscape rejimida — split. Dasturchi turli size class lar uchun alohida kod yozishi shart emas.

Tez-tez beriladigan savollar

NavigationView va NavigationStack o'rtasidagi farq nima?

NavigationView — eski API (iOS 13-15), faqat deklarativ NavigationLink ni qo'llab-quvvatlaydi. NavigationStack — yangi API (iOS 16+), dasturiy navigatsiya, chuqur havolalar va qat'iy tipizatsiya qilingan stek uchun path qo'shadi. NavigationStack Apple tomonidan yangi loyihalar uchun tavsiya etiladi.

navigationBar ga tugma qanday qo'shiladi?

.toolbar modifieri bilan ToolbarItem orqali. Masalan: .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button('Sozlamalar') { } } }. Placement joylashuvni belgilaydi: trailing (o'ngda), leading (chapda), principal (markazda).

Sarlavha va uning uslubini qanday sozlash mumkin?

Sarlavha .navigationTitle('Nom') orqali o'rnatiladi. Uslub — .navigationBarTitleDisplayMode(.large) yoki .inline. Large — iOS Music uslubidagi katta sarlavha, inline — Sozlamalardagi kabi ixcham. Uslub har bir ekran uchun alohida o'zgartirilishi mumkin.

NavigationLink orqali ma'lumotlarni qanday uzatish mumkin?

Uch usul: value orqali (NavigationLink(value:item) { Label }, iOS 16+), destination + label orqali, isActive orqali dasturiy o'tish uchun. Value bilan NavigationLink ro'yxatlar uchun tozaroq, chunki o'tishdan oldin maqsadli View yaratishni talab qilmaydi.

NavigationView dan watchOS va tvOS da foydalanish mumkinmi?

Ha. NavigationView va NavigationStack iOS, iPadOS, watchOS, tvOS va macOS da mavjud. WatchOS da navigatsiya Digital Crown g'ildiragi bilan interfeys iyerarxiyasidan, tvOS da masofadan boshqaruv pultidan fokus kiritishdan foydalanadi. Xatti-harakat platformaga avtomatik moslashadi.

Xulosa

  • NavigationView — avtomatik navigation bar va «Orqaga» tugmasi bilan SwiftUI stek navigatsiyasi uchun konteyner
  • NavigationLink — asosiy o'tish elementi, deklarativ (destination) va value-based sintaksisni qo'llab-quvvatlaydi
  • NavigationStack (iOS 16+) NavigationView ni almashtiradi, NavigationPath orqali dasturiy stek boshqaruvini qo'shadi
  • .toolbar navigation bar ga tugmalar qo'shadi, .navigationTitle large/inline uslub tanlovi bilan sarlavha o'rnatadi
  • NavigationPath — dasturiy navigatsiya va deep links uchun qat'iy tipizatsiya qilingan Hashable qiymatlar steki
  • NavigationSplitView (iOS 16+) interfeysni iPad va iPhone ga moslashtiradi, avtomatik split yoki stek tanlaydi
  • NavigationView va NavigationStack o'rtasidagi tanlov loyihadagi minimal qo'llab-quvvatlanadigan iOS versiyasi bilan belgilanadi

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing