Хокахей,
Я попробовал установить 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.
@loremipsum Я переношу старый проект. Большая часть материала сработала, но вы правы, мне тоже следует перенести это
developer.apple.com/documentation/swiftui/…
navigationBarBackButtonHidden
также отключает смахивание назад, поэтому я не думаю, что вам следует идти по этому пути. Почему бы вам просто не изменить оттенок, чтобы кнопка «Назад» по умолчанию была белой?
попробуйте добавить модификатор .navigationViewStyle(.stack)
к вашему NavigationView
или используйте NavigationStack
вместо NavigationView`
Почему вы используете NavigationView, он устарел уже много лет, как и NavigationBarItems.