Последнее представление появляется сразу после программного нажатия 2 представлений SwiftUI. - PullRequest
1 голос
/ 09 июля 2020

Я пытаюсь программно создать sh просмотров в SwiftUI, но когда я sh два представления с использованием свойства isActive для NavigationLink, последнее представление выталкивается и мгновенно появляется. Я не уверен, что я делаю что-то не так, или это ошибка SwuiftUI. This is how it looks when I try to push the two views.

If I push one view and then the other some times it works:

If I push one view and then the other some times it works

This is my code. I'm passing appState as an EnvironmentObject

class AppState: ObservableObject {
    @Published var showView1 = false
    @Published var showView2 = false
}

struct ContentView: View {
    @EnvironmentObject var appState: AppState
    var body: some View {
        NavigationView {
            VStack {
                Button(action: {
                    appState.showView2 = false
                    appState.showView1 = true
                }) {
                    Text("Show view 1")
                }
                Button(action: {
                    appState.showView2 = true
                    appState.showView1 = true
                }) {
                    Text("Show view 2")
                }
                NavigationLink( destination: View1(), isActive: $appState.showView1, label: { EmptyView() })
            }
        }
    }
}

struct View1: View {
    @EnvironmentObject var appState: AppState

    var body: some View {
        VStack {
            Text("This is view1")
            Button(action: {
                appState.showView2 = true
            }) {
                Text("Show view2")
            }
            NavigationLink( destination: View2(), isActive: $appState.showView2, label: { EmptyView() })
        }
    }
}

struct View2: View {
    @EnvironmentObject var appState: AppState
    var body: some View {
        VStack {
            Text("This is view2")
            Button(action: {
                appState.showView1 = false
                appState.showView2 = false
            }) {
                Text("Back to root")
            }
        }
    }
}

This may be related to the bug described here { ссылка }

Но в этом случае все наоборот. Представление появляется вместо нажатого

Я использую Xcode 12.0 beta 2 (12A6163b)

...