从主视图拖动时禁用 iOS 13 上呈现的视图控制器的交互式关闭

Ene*_*nso 5 modalviewcontroller ios ios13 interactive-dismissal

TLDR:寻找一种解决方案,以在从导航栏向下拖动时启用交互式关闭,而不是从视图控制器的视图中拖动。

介绍

iOS 13 模态视图控制器允许通过以下几种方式禁用交互式关闭:

  1. 设置vc.modalPresentationStyle = .fullScreen(请参阅在 iOS 13 全屏显示模式
  2. 设置viewController.isModalInPresentation = true(请参阅禁用 iOS 13 中呈现的视图控制器的交互式关闭
  3. 实现UIAdaptivePresentationControllerDelegate委托方法(请参阅iOS13 中的 UINavigationBar 更改

如果您想要与 iOS 12 及更低版本相同的行为,第一个很棒。

第二个,非常适合防止交互式关闭,但仍然允许在从主视图控制器视图中拉动时向下拖动视图控制器(带有漂亮的动画)。

后者允许更好地处理事件,但无助于防止从视图控制器的视图中拖动。

下拉刷新(关闭)

我见过的最接近的事情是设置刷新控件以防止在下拉刷新期间被关闭。此 GIF 显示了我正在寻找的行为(来源):

交互式关闭下拉刷新

这种下拉刷新交互可以在 iOS 日历应用程序的模式收件箱屏幕中看到。

我在找什么

我正在寻找的行为与上面的下拉刷新相同,但没有滚动视图和刷新控件。

基本上,对视图控制器视图的触摸不应触发交互式解除。

我尝试了以下方法,但没有运气:

  • view.isExclusiveTouch = true
  • view.isUserInteractionEnabled = false

总之,我需要的是:

  1. 从导航栏拖动时启用交互式关闭
  2. 拖动主视图内的任意位置时禁用交互式关闭
  3. 解雇没有反弹

谢谢!