【问题描述】
最近使用了.sheet方式展示一个页面,但希望能实现提醒事项中详细信息编辑未保存下滑出现的阻止效果。
网上查阅了相关资料:

方案一
通过.presentation()方法将sheet固化在最前面
参考:

方案二
通过.allowAutoDismiss
方式阻止自动dismiss
参考:
https://stackoverflow.com/a/65140858

方案三
自定义拖拽手势,并设置view的高优先级手势
参考:

方案四
使用fullScreenCover代替sheet
参考:
https://stackoverflow.com/a/66176956

以上四种方式弊端:
只是起到阻止dismiss效果,并不解决问题

方案五
从自定义拖拽手势的解决方案中获得启发:

  1. 定义向下拖拽手势
    1. 如果当前未编辑或已保存,调用dismiss方法
    2. 如果当前已编辑未保存,调用ActionSheet选项
  2. 将自定义的向下拖拽的手势成view高优先级的手势

GG
使用了highPriorityGesture()后,页面中的按钮和编辑框都失效了。而且不是和提醒事项中一样,有页面下降的动作,再出现actionSheet提示效果。

【解决方案】
重新Google了一下,然后直接找到最优解
Dismiss Gesture for SwiftUI Modals
这篇文章题目,真的,太有误导性了。