首页 > 解决方案 > SwiftUI:在用户滑动以关闭时显示警报

问题描述

只是想知道 --- 截至 2020 年 --- SwiftUI 包中是否有内置方式来增强表格上的“滑动以关闭”手势。

我在这里遇到过这个问题:防止在 SwiftUI 中解除模态视图控制器--- 不起作用(至少不再起作用)并且 Xcode 不建议对赞成答案中提供的代码进行修复/迁移。

也去过其他一些帖子,但他们要么指向上面的链接答案,要么建议第 3 方包。(我试图避免这些,因为 SwiftUI 正在迅速发展,并且更好地坚持 Apple 目前官方提供的内容。)

总而言之,有没有办法——

  1. 防止用户通过向下滑动来关闭 a Sheet(不是 a )FullScreenCover
  2. 可以选择显示警报或做任何其他事情,例如当您转到 Calendar.app 时,创建一个事件,输入几个字母并尝试将其关闭
  3. ... 全部不使用 3rd 方库?

谢谢。

标签: iosswiftswiftui

解决方案


这是一个用于阻止工作表关闭的原生 SwiftUI 方法的演示 - 只需提供带有拖动手势的背景。

使用 Xcode 12 / iOS 14 测试

演示

struct DemoSheetNoClose: View {
    @State private var showSheet = false
    var body: some View {
        Button("Show Sheet") { self.showSheet.toggle() }
            .sheet(isPresented: $showSheet) {
                ZStack {
                    Rectangle().fill(Color.red).border(Color.black) // << just demo
                        .edgesIgnoringSafeArea(.all)
                        .highPriorityGesture(DragGesture(minimumDistance: 0).onEnded { value in
                            // handle value here to, for example, show alert
                        })

                    Text("Content Here!")
                }
            }
    }
}

注意:它可以作为视图包装器、修改器等。


推荐阅读