在iOS13中,使用表单和页面表样式的模态演示可以通过向下平移的手势关闭.这在我的一个表单中是有问题的,因为用户绘制到这个框中会干扰手势.它会将屏幕向下拉,而不是绘制垂直线.

在显示为图纸的模态视图控制器中,如何禁用垂直滑动以消除手势?

设置isModalInPresentation = true仍然允许将薄板拉下,只是不会取消.

推荐答案

一般来说,你不应该试图禁用滑动来取消功能,因为用户希望所有表单/页面在所有应用程序中都有相同的行为.相反,您可能希望考虑使用全屏演示样式.如果您确实想要使用不能通过滑动取消的工作表,请设置isModalInPresentation = true,但请注意,这仍然允许工作表垂直向下拉,并且在松开touch 时它会反弹回来.查看UIAdaptivePresentationControllerDelegate个文档,以便在用户try 通过滑动等操作将其关闭时做出react .

如果你有一个应用程序的手势或touch 处理受到滑动关闭功能影响的场景,我确实收到了一位苹果工程师关于如何解决这个问题的建议.

如果您可以阻止系统的平移手势识别器开始,这将防止手势解除.要做到这一点,有几种方法:

  1. 如果您的画布绘制是使用手势识别器完成的,比如您自己的UIGestureRecognizer子类,那么在工作表的解除手势之前进入began阶段.认出快到UIPanGestureRecognizer就赢了,这张纸的解散手势就被颠覆了.

  2. 如果您的画布绘制是使用手势识别器完成的,请将动态失败要求设置为-shouldBeRequiredToFailByGestureRecognizer:(或相关的委托方法),其中,如果传入的手势识别器是UIPanGestureRecognizer,则返回NO.

  3. 如果您的画布绘制是使用手动touch 处理(例如touchesBegan:)完成的,请在touch 处理视图上覆盖-gestureRecognizerShouldBegin,如果传入的手势识别器是UIPanGestureRecognizer,则返回NO.

通过我的设置#3证明效果很好.这允许用户向下滑动绘图画布之外的任何位置以关闭(如导航栏),同时允许用户在不移动图纸的情况下进行绘图,正如人们所期望的那样.

我不推荐try 寻找手势来禁用它,因为它似乎是相当动态的,例如在不同大小的类之间切换时可以重新启用,这可能会在future 的版本中发生变化.

Ios相关问答推荐

PieChartView未以编程方式显示在屏幕上

SWIFT设备方向更新不正确

在金属中设置纹理的UV坐标以编程方式变形纹理

设置托管在DigitalOcean上的iOS通用链接

封装 Swift 导入

如何在 Flutter 应用程序中测试来自 App/Play Store 的移动深层链接?

错误地提取问题的答案选项

如何使用 pushViewController 从 UIHostingController 的 SwiftUI 视图中推送 ViewController?

为什么这个 SwiftUI 状态在作为非绑定参数传递时没有更新?

具有线性渐变的 SVG textPath 在 Safari 中损坏

iOS 16 堆栈视图中按钮的奇怪动画

如何关闭情节提要弹出框

当键盘出现在 iOS 中时,将 UIView 上移

如何用 Swift 圆化 UILabel 的边缘

如何缩小 UIImage 并使其同时变得清晰/锐利而不是模糊?

CoreBluetooth 应用程序到底能在后台做什么?

在 Objective-C 中将所有文本转换为小写

Swift 中的日期到毫秒和回溯到日期

模态视图控制器 - 如何显示和关闭

FBSDKCoreKit/FBSDKCoreKit.h 未找到错误