NavigationView .navigationBarBackButtonHidden не работает при первом запуске

Хокахей,

Я попробовал установить NavigationBarBackButtonHidden(true), но у меня это не работает так, как ожидалось. Я пытаюсь добавить пользовательскую панель инструментов NavigationView на второй экран. Когда я выбираю первую навигационную ссылку и появляется второй экран, заголовок отображается как «Текст кнопки «Назад». Какого черта я не получил?

Как только вы закроете второй экран и снова выберете вид навигации, строка меню будет работать как положено.

Вот мой кусок кода. То же поведение в Xcode 15.4 (последний бета-патч)

struct MyNavigationView: View {
    
    var body: some View {
        NavigationView {
            ScrollView {
                NavigationLink {
                    SecondScreen(showCloseButton: true)
                        .navigationBarHidden(true)
                } label: {
                    HStack {
                        Image(systemName: "tortoise.circle.fill")
                        VStack(alignment: .leading, spacing: 0) {
                            Text("SecondScreen")
                                .font(.headline)
                            Text("Touch for Info")
                                .font(.system(size: 10))
                        }
                        Spacer()
                    }
                    
                }
            }
            .padding(.horizontal)
            .navigationBarItems(
                leading: Image(systemName: "trash.circle"),
                trailing:
                    NavigationLink(destination: {
                        SecondScreen(showCloseButton: false).navigationBarBackButtonHidden(true)
                    }, label: {
                        Image(systemName: "plus.circle")
                    })
                
            )
            .navigationTitle("Master View")
            .navigationBarBackButtonHidden(true)
            .accentColor(.pink)
        }
    }
}

struct SecondScreen: View {
    
    @Environment(\.dismiss) var dismiss
    var showCloseButton: Bool
    
    init(showCloseButton: Bool) {
        self.showCloseButton = showCloseButton
    }
    
    var body: some View {
        ZStack(alignment: .topLeading) {
            Color.pink
                .ignoresSafeArea()
            if showCloseButton {
                VStack {
                    Button {
                        dismiss()
                    } label: {
                        Image(systemName: "xmark.circle")
                            .font(.largeTitle)
                            .foregroundColor(.white)
                            .padding(20)
                    }
                }
            }
            VStack(alignment: .center) {
                Text("Hello world!").foregroundColor(.white).font(.largeTitle)
            }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .toolbar {
                ToolbarItem(placement: .topBarLeading) {
                    Button(action: {
                        dismiss()
                    }, label: {
                        Image(systemName: "arrowshape.backward.circle")
                            .foregroundColor(.white)
                        Text("Back")
                            .foregroundColor(.white)
                            .fontWeight(.bold)
                    })
                }
            }
            //.toolbarBackground(.hidden, for: .navigationBar)
            .navigationBarBackButtonHidden(true)
            .navigationTitle("Detail Title")
        }
        
        
    }
}

Как упоминалось в ответах и ​​комментариях ниже, NavigationView устарел. Решение этого конкретного вопроса состоит в том, чтобы изменить NavigationView в NavigationViewStack, но остальное, конечно, тоже надо адаптировать под новый NavigationViewStack.

Почему вы используете NavigationView, он устарел уже много лет, как и NavigationBarItems.

lorem ipsum 27.06.2024 22:52

@loremipsum Я переношу старый проект. Большая часть материала сработала, но вы правы, мне тоже следует перенести это

rotecodefraktion 27.06.2024 23:14

developer.apple.com/documentation/swiftui/…

lorem ipsum 27.06.2024 23:44
navigationBarBackButtonHidden также отключает смахивание назад, поэтому я не думаю, что вам следует идти по этому пути. Почему бы вам просто не изменить оттенок, чтобы кнопка «Назад» по умолчанию была белой?
malhal 28.06.2024 09:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

попробуйте добавить модификатор .navigationViewStyle(.stack) к вашему NavigationView или используйте NavigationStack вместо NavigationView`

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