向下滑动以关闭时,SafariViewControllerDidFinish 不会触发
Posted
技术标签:
【中文标题】向下滑动以关闭时,SafariViewControllerDidFinish 不会触发【英文标题】:SafariViewControllerDidFinish does not fire when swiping down to dismiss 【发布时间】:2020-06-01 15:30:47 【问题描述】:我在SFSafariViewController
上有一个委托,负责清理safariViewControllerDidFinish
事件中的任务。在 ios 13+ 中,用户可以向下滑动以关闭,但在这种情况下不会触发此事件。我不想通过启用isModalInPresentation
来禁用此手势。
有没有办法让safariViewControllerDidFinish
在这种情况下触发,或者我如何检测用户向下滑动以关闭 Safari 视图控制器?
【问题讨论】:
【参考方案1】:您可以通过将自己设为演示控制器的委托并覆盖presentationControllerDidDismiss(_:)
来了解用户何时关闭SFSafariViewController
。查看有关此主题的 documentation。
注意:如果您以编程方式使用dismiss(animated:)
,则不会调用此方法。
【讨论】:
【参考方案2】:@Frankenstein 的回答对我有用,但我花了一段时间才能正确设置我的代码,所以只想在此处添加一些代码 sn-ps
class MyViewController: UIViewController
func presentSafariVC()
let url = //...
let config = SFSafariViewController.Configuration()
let safariVC = SFSafariViewController(url: url, configuration: config)
safariVC.modalPresentationStyle = .formSheet
safariVC.delegate = self
safariVC.presentationController?.delegate = self
present(safariVC, animated: true)
extension MyViewController: SFSafariViewControllerDelegate, UIAdaptivePresentationControllerDelegate
// click top left "Done" button and dismissed
func safariViewControllerDidFinish(_ controller: SFSafariViewController)
// do your stuff
// swipe down and dismissed
func presentationControllerDidDismiss(_ presentationController: UIPresentationController)
// do your stuff
另外,我原本是在寻找一种方法来防止向下滑动以关闭呈现的 vc,但似乎设置 safariVC.isModalInPresentation = true
没有效果,我仍然可以向下滑动以关闭它。这是在 XCode 12、iOS 14.2 模拟器上观察到的。
【讨论】:
和你一样的问题。这应该是公认的答案。谢谢!以上是关于向下滑动以关闭时,SafariViewControllerDidFinish 不会触发的主要内容,如果未能解决你的问题,请参考以下文章