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.

Другие вопросы по тегам