Добавить объявление

NavigationStack в SwiftUI: современная навигация

NavigationStack - это новый (с iOS 16+) и более мощный способ организации навигации в SwiftUI. В отличие от NavigationView, он дает полный контроль над стеком экранов и поддерживает сложные сценарии.

Основные возможности:


  • Программное управление стеком экранов (пуш, поп, переход к корню).

  • Глубокая навигация по ссылкам (например, app://products/123).

  • Кастомные переходы между экранами.

  • Поддержка NavigationPath для хетерогенных данных в стеке.

Пример использования:


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

var body: some View {
NavigationStack(path: $path) {
List {
NavigationLink("Экран 1", value: 1)
NavigationLink("Экран 2", value: "Текст")
}
.navigationDestination(for: Int.self) { value in
Text("Число: \(value)")
}
.navigationDestination(for: String.self) { value in
Text(value)
}
}
}
}

NavigationPath:


Тип-обертка для управления стеком. Может содержать разные типы данных:
path.append(1)
path.append("ABC")
path.removeLast()

navigationDestination(for:)


Определяет, какой экран показывать для каждого типа данных:
.navigationDestination(for: Product.self) { product in
ProductView(product: product)
}

Программная навигация:


Button("Перейти к экрану 3") {
path.append(3)
}

Button("Назад") {
path.removeLast()
}

Button("В корень") {
path.removeLast(path.count)
}

Глубокая навигация:


Можно привязать навигацию к URL:
NavigationStack(path: $path) {
}
.onOpenURL { url in
if url.path == "/products/123" {
path.append(Product(id: 123))
}
}

Рекомендации:


  • Для iOS 15 и ниже используйте NavigationView.

  • Для модальных окон - sheet или fullScreenCover.

  • Не смешивайте NavigationStack и NavigationView.


NavigationStack - это эволюция навигации в SwiftUI. Он идеален для приложений со сложной навигацией, программного управления историей экранов и лубоких ссылок.
19.07.2025 36 402