SwiftUI: navigationBarItems отсутствует при первом рендеринге
Я вижу странную проблему, которую мне удалось воспроизвести на небольшом образце. Если у вас есть подробное представление,
navigationBarItems
set, и эта деталь является вторым представлением, помещенным в стек навигации, элементы не отображаются, когда вы переходите на страницу сведений. Вот образец:
struct ContentView: View {
var body: some View {
NavigationView {
VStack {
NavigationLink(destination: MiddleTestView()) {
Text("Push View")
}
}
}
}
}
struct MiddleTestView: View {
var body: some View {
VStack {
NavigationLink(destination: TestView()) {
Text("Push Another View")
}
}
}
}
struct TestView: View {
var body: some View {
VStack {
Text("Testing 1, 2, 3")
}
.navigationBarItems(leading: Button("Test") { print("pressed") })
}
}
Если что-то вызывает
TestView
для повторного рендеринга, кнопка покажет, например, если
TestView
Является ли это:
struct TestView: View {
@State var hasChanges = false
var body: some View {
VStack {
Text("Testing 1, 2, 3")
Button("Toggle") { hasChanges = !hasChanges }
}
.navigationBarItems(leading: Button(hasChanges ? "Test1" : "Test2") { print("pressed") })
}
}
Затем нажатие кнопки "Toggle" один раз вызовет
navigationBarItems
появиться, и они будут оставаться там, пока представление не будет закрыто. Кроме того, если
TestView
отображается первым вместо
MiddleTestView
, то проблем с
navigationBarItems
. Я не вижу причин для такого поведения, это кажется довольно явной ошибкой, которая существенно нарушает работу со стеками навигации в SwiftUI, если я чего-то не упускаю. Кто-нибудь знает, что здесь происходит или как это обойти?