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)
}
}
}
}
1️⃣ NavigationPath.
Тип-обертка для управления стеком. Может содержать разные типы данных:
path.append(1)
path.append("ABC")
path.removeLast()
2️⃣ navigationDestination(for:).
Определяет, какой экран показывать для каждого типа данных:
.navigationDestination(for: Product.self) { product in
ProductView(product: product)
}
3️⃣ Программная навигация.
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. Он идеален для приложений со сложной навигацией, программного управления историей экранов и лубоких ссылок.
➡️ Подписаться на канал
Мобильный трудоголик