当我使用按钮显示工作表时,将工作表拉下后会再次自动显示

时间:2019-09-03 23:44:39

标签: button swiftui

当我使用按钮显示工作表时,将工作表下拉后会自动再次显示。

在ondismiss中添加参数

.navigationBarItems(trailing: Button(action: {self.showEditorInfo.toggle()}) {
        Image(systemName: "paperplane")
    }.sheet(isPresented: $showEditorInfo, onDismiss: {self.showEditorInfo.toggle()}) {
        Text("123")
    })
}

2 个答案:

答案 0 :(得分:0)

当工作表被下拉时,您的视图将被重绘,并且由于showEditorInfo为true,因此工作表将再次呈现。确保在onDismiss中重置该值:

.sheet(isPresented: $showEditorInfo,
       onDismiss: { self.showEditorInfo = false }) {
           Text("123")
    }

您可能希望将showEditorInfo作为绑定传递到下一个视图,以便可以以编程方式将其关闭。因此,在onDismiss中将值设置为false而不进行切换很重要。

答案 1 :(得分:-1)

这里有两个不相关的问题:第一个是toggle()处理程序中的onDismiss,第二个似乎是具有简单解决方法的模拟器错误。

  1. isPresenting binding 作为参数,它告诉您工作表将对showEditorInfo的值变化做出反应,但 ,它将修改该值以反映UI的状态。在工作表上向下拖动以将其关闭时,showEditorInfo会自动设置为false。在您的代码中,您将其切换回true。

  2. 解决了#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")
        }
    }
}