Xcode SwiftUI ведущий navigationBarItem не работает, но конечный navigationBarItem работает
Я новый программист Xcode/SwiftUI, и я столкнулся с проблемой в моем коде ThirdView (ниже), в результате чего тот же самый код кнопки работает так, как ожидалось, как конечный navigationBarItem, но не отображается вообще, когда я перемещаю кнопку и связанный с ней код на ведущее место позиции бара. Следующий код иллюстрирует проблему.
Этот образец кода практически идентичен коду для предыдущего вопроса, который я опубликовал (который очень полезный член сообщества StackOverflow помог мне решить); мой вопрос здесь касается другой проблемы в том же коде.
struct ContentView: View {
@State private var activeLink: Bool = false
var body: some View {
NavigationView {
VStack {
Spacer()
NavigationLink("Show Second Screen",
destination: SecondView(active: $activeLink), isActive: $activeLink)
Spacer()
}.padding()
.navigationBarTitle("First view")
} // End of NavigationView
} // End of body
} // End of ContentView
struct SecondView: View {
@Binding var active: Bool
@State private var thirdViewLink: Bool = false
var body: some View {
VStack {
Spacer()
NavigationLink(destination: ThirdView(thirdViewActive: $thirdViewLink),
isActive: $thirdViewLink) {
EmptyView()
} // End of NavigationLink
Spacer()
}.padding() // End of VStack
.navigationBarTitle("Second View")
.navigationBarBackButtonHidden(true)
.navigationBarItems(leading: Button("Back to 1st View") {
self.active = false
}, trailing: Button("Show Third View") {
self.thirdViewLink = true
}
)
} // End of body
} // End of SecondView
struct ThirdView: View {
@Binding var thirdViewActive: Bool
var body: some View {
VStack(spacing: 15) {
Text("Third View")
Spacer()
}.padding() // End of VStack
.navigationBarBackButtonHidden(true)
//The following approach does NOT work
.navigationBarItems(leading: Button("Back to 2nd View") {
self.thirdViewActive = false
})
// This DOES work - why the difference?
/* .navigationBarItems(trailing: Button("Back to 2nd View") {
self.thirdViewActive = false
}) */
} // End of body
} // End of ThirdView
Почему кнопка ThirdView для «Назад ко второму виду» появляется только тогда, когда я назначаю ее конечному местоположению navigationBarItems()? Как я могу сделать так, чтобы кнопка в этой ситуации появлялась на первом месте? Большое спасибо за любую информацию, которую вы можете предоставить!
1 ответ
ваш код хорошо работает для меня на macos 12.beta, xcode 13.beta, target ios 15 и macCatalyst 12, когда я использую это:
struct ContentView: View {
@State private var activeLink: Bool = false
var body: some View {
NavigationView {
VStack {
Spacer()
NavigationLink("Show Second Screen",
destination: SecondView(active: $activeLink), isActive: $activeLink)
Spacer()
}.padding()
.navigationBarTitle("First view")
} // End of NavigationView
.navigationViewStyle(.stack) // <--- here
} // End of body
} // End of ContentView
Проверено на macOS 12, а также на iPhone и iPad ios15.