一尘不染

SwiftUI-出现工作表后,无法单击导航栏按钮

swift

我几周前才开始使用SwiftUI,正在学习。今天,我遇到了一个问题。

当我显示一个带有navigationBarItems-
button的工作表,然后关闭ModalView并返回到ContentView时,我发现自己无法再次单击navigationBarItems-button。

我的代码如下:

struct ContentView: View {

    @State var showSheet = false

    var body: some View {
        NavigationView {
            VStack {
                Text("Test")
            }.sheet(isPresented: self.$showSheet) {
                ModalView()
            }.navigationBarItems(trailing:
                Button(action: {
                    self.showSheet = true
                }) {
                    Text("SecondView")
                }
            )
        }
    }
}

struct ModalView: View {

    @Environment(\.presentationMode) var presentation

    var body: some View {
        VStack {
            Button(action: {
                self.presentation.wrappedValue.dismiss()
            }) {
                Text("Dismiss")
            }
        }
    }
}

阅读 221

收藏
2020-07-07

共1个答案

一尘不染

我认为发生这种情况是因为presentationMode不是从演示者视图继承的,所以演示者不知道该模式已经关闭。您可以通过添加presentationMode到演示者(在本例中为ContentView)来解决此问题。

struct ContentView: View {

    @Environment(\.presentationMode) var presentation
    @State var showSheet = false

    var body: some View {
        NavigationView {
            VStack {
                Text("Test")
            }.sheet(isPresented: self.$showSheet) {
                ModalView()
            }.navigationBarItems(trailing:
                Button(action: {
                    self.showSheet = true
                }) {
                    Text("SecondView")
                }
            )
        }
    }
}

在Xcode 11.4上测试。

2020-07-07