Поскольку есть некоторые проблемы с iOS 13.4 и Xcode 11.4 с presentationMode.wrappedValue.dismiss()
Я ищу альтернативный подход к go назад программно. Я нашел это решение от MScottWaller:
iOS SwiftUI: программно отображать или закрывать представление
К сожалению, в моем случае это не работает:
struct MasterView: View {
@State private var showDetail = false
var body: some View {
VStack {
Text("MasterView")
.navigationBarItems(trailing: HStack {
NavigationLink(destination: DetailView(showSelf: $showDetail), isActive: $showDetail) {
Image(systemName: "tag")
.padding(.leading, 4)
}
})
}
}
}
struct DetailView: View {
@Binding var showSelf: Bool
var body: some View {
Button(action: {
self.showSelf = false
}) {
Text("Pop")
}
}
}
Если NavigationLink находится внутри навигационного элемента, я не могу go вернуться из моего DetailView. Я не знаю, является ли это ошибкой или есть другие причины, по которым NavigationLink не работает таким же образом внутри navigationBarItem.
В качестве обходного пути я использую этот вариант с пустой NavigationLink внутри представления. Это работает, но мне не нравится это:
struct MasterView: View {
@State private var showDetail = false
var body: some View {
VStack {
Text("MasterView")
NavigationLink(destination: DetailView(showSelf: $showDetail), isActive: $showDetail) {
EmptyView()
}
.navigationBarItems(trailing: HStack {
Button(action: { self.showDetail.toggle() }) {
Image(systemName: "tag")
.padding(.leading, 4)
}
})
}
}
}
Есть идеи, почему NavigationLink не исправляет работу внутри navigationBarItem?