SwiftUI NavigationView, возвращение назад, если NavigationLink находится внутри NavigationBarItem - PullRequest
0 голосов
/ 06 февраля 2020

Поскольку есть некоторые проблемы с 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?

...