Динамически устанавливать SwiftUI NavigationBarItems?
Как можно динамически изменять элементы панели навигации SwiftUI?
У меня есть TabView в NavigationView, и я хотел бы, чтобы элементы панели навигации менялись в зависимости от выбранной вкладки. Однако мне трудно определить, как это изменить с помощью.onAppear(), если предположить, что это даже то, что вы должны делать.
В настоящее время мой код выглядит следующим образом:
var body: some View {
NavigationView {
TabView {
contentWithNavigationButtons()
.tabItem {
Image(systemName: "house")
Text("Buttons")
}
contentWithoutNavigationButtons()
.tabItem {
Image(systemName: "person")
Text("No Buttons")
}
.onAppear {
//Navigation Bar Items should be removed
}
}
.navigationBarItems(trailing: someButton)
}
1 ответ
Решение
Вот демонстрация возможного решения - добавить отслеживание выбора для вкладок и сделать кнопку в зависимости от выбора вкладки. Протестировано с Xcode 12 / iOS 14
struct DemoView: View {
@State private var selection = 0 // << here !!
var body: some View {
NavigationView {
TabView(selection: $selection) {
contentWithNavigationButtons()
.tabItem {
Image(systemName: "house")
Text("Buttons")
}.tag(0) // << here !!
contentWithoutNavigationButtons()
.tabItem {
Image(systemName: "person")
Text("No Buttons")
}.tag(1)
}
.navigationBarItems(trailing: Group {
if selection == 0 { // << here !!
Button("Some"){}
}
})
}
}
}