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)
}
}
Результат:

