Ios SafariViewControllerdFinish向下滑动解除时不开火

Ios SafariViewControllerdFinish向下滑动解除时不开火,ios,sfsafariviewcontroller,sfsafariviewcontrollerdelegate,Ios,Sfsafariviewcontroller,Sfsafariviewcontrollerdelegate,我在SFSafariViewController上有一个代理,它在safariviewcontrollerddfinish事件中清理任务。在iOS 13+中,用户可以向下滑动以解除,但在这种情况下不会触发此事件。我不想通过启用isModalInPresentation来禁用此手势 有没有办法让SafariViewControllerdFinish在这种情况下开火,或者,我如何检测用户向下滑动以关闭Safari view控制器?您可以通过使自己成为演示控制器的委托并覆盖PresentationCo

我在
SFSafariViewController
上有一个代理,它在
safariviewcontrollerddfinish
事件中清理任务。在iOS 13+中,用户可以向下滑动以解除,但在这种情况下不会触发此事件。我不想通过启用
isModalInPresentation
来禁用此手势


有没有办法让SafariViewControllerdFinish在这种情况下开火,或者,我如何检测用户向下滑动以关闭Safari view控制器?

您可以通过使自己成为演示控制器的委托并覆盖
PresentationControllerDidDisclease(:)
来知道用户何时关闭
SFSafariViewController
。查看有关此主题的详细信息


注意:如果以编程方式使用
discouse(动画:)
,则不会调用此方法。

@Frankenstein的答案对我很有用,但我花了一段时间才正确设置了代码,所以只想在此处添加一些代码片段

类MyViewController:UIViewController{
func presentSafariVC(){
让url=/。。。
让config=SFSafariViewController.Configuration()
让safariVC=SFSafariViewController(url:url,配置:config)
safariVC.modalPresentationStyle=.formSheet
safariVC.delegate=self
safariVC.presentationController?.delegate=self
当前(safariVC,动画:真)
}
}
扩展名MyViewController:SFSafariViewControllerDelegate,UIAdaptivePresentationControllerDelegate{
//单击左上角的“完成”按钮并取消
func SafariViewControllerdFinish(\uController:SFSafariViewController){
//做你的事
}
//刷下并解除
func PresentationControllerDidDisclose(presentationController:UIPresentationController){
//做你的事
}
}

另外,我最初正在寻找一种方法来防止向下滑动以关闭显示的vc,但似乎设置
safariVC.isModalInPresentation=true
没有效果,我仍然可以向下滑动以关闭它。这是在XCode 12、iOS 14.2模拟器上观察到的。

与您的问题相同。这应该是公认的答案。谢谢