swiftui navigation как показать только последний back

struct CategoryScreen: View {
    
    @State private var categories = [Category]()
    
    var body: some View {
        NavigationView {
            List(categories, id: \.id) { category in
                NavigationLink(destination: CategoryScreen()) {
                    Text(category.name)
                }
            }.onAppear(perform: loadData)
        }
    }
    
}```

Создает последовательность баров <Back - как оставлять только последний?

Ответы (1 шт):

Автор решения: VAndrJ

Если Вы про такую картину:

введите сюда описание изображения

То проблема в том, что Вы переходите на NavigationView из NavigationView и т.д. В UIKit подобное привело бы к "падению" приложения, в SwiftUI допустимо.

Для решения этого нужно вынести NavigationView в отдельный компонент, а переходить на компонент, который будет "встраиваться". К примеру:

struct ContentView: View {
    var body: some View {
        NavigationView {
            CategoryScreen(title: nil)
        }
    }
}

struct CategoryScreen: View {
    let title: String?
    @State private var categories: [Category] = (0...10).map { _ in Category() }
    
    var body: some View {
        List(categories, id: \.id) { category in
            NavigationLink(destination: CategoryScreen(title: category.name)) {
                Text(category.name)
            }
        }
        .navigationBarTitle(title ?? "", displayMode: .inline)
    }
}

Результат:

введите сюда описание изображения

→ Ссылка