在 iOS 13 中,使用表单和页面样式的模态演示可以通过向下平移手势关闭。这在我的一张表单中是有问题的,因为用户绘制到这个干扰手势的框中。它会将屏幕向下拉,而不是画一条垂直线。
如何在呈现为工作表的模态视图 Controller 中禁用垂直滑动以消除手势?
设置 isModalInPresentation = true
仍然允许下拉表单,只是不会关闭。
最佳答案
一般来说,您不应尝试禁用滑动关闭功能,因为用户希望所有表单/页面工作表在所有应用程序中的行为都相同。相反,您可能需要考虑使用全屏演示样式。如果您确实想使用无法通过滑动关闭的工作表,请设置 isModalInPresentation = true
,但请注意,这仍然允许工作表被垂直下拉,并且在释放时会弹回触摸。查看UIAdaptivePresentationControllerDelegate当用户试图通过滑动等操作将其关闭时使用react的文档。
如果您的应用程序的手势或触摸处理受到滑动关闭功能的影响,我确实从 Apple 工程师那里收到了一些关于如何解决该问题的建议。
如果您可以阻止系统的平移手势识别器开始,这将防止手势解除。有几种方法可以做到这一点:
如果您的 Canvas 绘图是使用手势识别器完成的,例如您自己的
UIGestureRecognizer
子类,请在工作表的关闭手势执行之前进入began
阶段。如果您识别的速度与UIPanGestureRecognizer
一样快,您将获胜,并且工作表的关闭手势将被颠覆。如果您的 Canvas 绘图是使用手势识别器完成的,请使用
-shouldBeRequiredToFailByGestureRecognizer:
(或相关的委托(delegate)方法)设置动态失败要求,您返回NO
如果传入的手势识别器是UIPanGestureRecognizer
。如果您的 Canvas 绘图是通过手动触摸处理(例如
touchesBegan:
)完成的,请覆盖触摸处理 View 上的-gestureRecognizerShouldBegin
,并返回NO
如果传入的手势识别器是UIPanGestureRecognizer
。
事实证明,我的设置 #3 运行良好。这允许用户在绘图 Canvas 之外的任何地方向下滑动以关闭(如导航栏),同时允许用户在不移动工作表的情况下进行绘图,正如人们所期望的那样。
我不建议尝试找到禁用它的手势,因为它似乎是动态的,并且可以在例如在不同尺寸类别之间切换时重新启用,这可能会在未来的版本中改变。
关于ios - 禁用手势以下拉表单/页面模式呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56718552/