当我使用按钮显示工作表时,将工作表下拉后会自动再次显示。
在ondismiss中添加参数
.navigationBarItems(trailing: Button(action: {self.showEditorInfo.toggle()}) {
Image(systemName: "paperplane")
}.sheet(isPresented: $showEditorInfo, onDismiss: {self.showEditorInfo.toggle()}) {
Text("123")
})
}
答案 0 :(得分:0)
当工作表被下拉时,您的视图将被重绘,并且由于showEditorInfo为true,因此工作表将再次呈现。确保在onDismiss中重置该值:
.sheet(isPresented: $showEditorInfo,
onDismiss: { self.showEditorInfo = false }) {
Text("123")
}
您可能希望将showEditorInfo作为绑定传递到下一个视图,以便可以以编程方式将其关闭。因此,在onDismiss中将值设置为false而不进行切换很重要。
答案 1 :(得分:-1)
这里有两个不相关的问题:第一个是toggle()
处理程序中的onDismiss
,第二个似乎是具有简单解决方法的模拟器错误。
isPresenting
以 binding 作为参数,它告诉您工作表将对showEditorInfo
的值变化做出反应,但 还 ,它将修改该值以反映UI的状态。在工作表上向下拖动以将其关闭时,showEditorInfo
会自动设置为false。在您的代码中,您将其切换回true。
解决了#1问题后,您的问题已在设备上修复,但仍在模拟器中发生。 原因似乎是您的工作表已附加到Button
中的navigationBarItems
。如果将工作表放在NavigationView
本身上,或者将其放置在Button
以外的任何地方,它的行为都将在Simulator中达到预期。
struct ContentView: View {
@State var showEditorInfo = false
var body: some View {
NavigationView {
Text("ContentView")
.navigationBarItems(trailing:
Button(action: {
self.showEditorInfo.toggle()
}) {
Image(systemName: "square.and.pencil")
})
}
.sheet(isPresented: $showEditorInfo) {
Text("Sheet")
}
}
}