我几周前才开始使用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") } } } }
我认为发生这种情况是因为presentationMode不是从演示者视图继承的,所以演示者不知道该模式已经关闭。您可以通过添加presentationMode到演示者(在本例中为ContentView)来解决此问题。
presentationMode
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上测试。