向下滑动关闭时,SafariViewControllerDidFinish 不会触发
SafariViewControllerDidFinish does not fire when swiping down to dismiss
我在 SFSafariViewController
上有一个委托,负责清理 safariViewControllerDidFinish
事件中的任务。在 iOS 13+ 中,用户可以向下滑动以关闭,但在这种情况下不会触发此事件。我不想通过启用 isModalInPresentation
.
来禁用此手势
有没有办法让 safariViewControllerDidFinish
在这种情况下触发,或者我如何检测用户向下滑动以关闭 Safari 视图控制器?
您可以知道用户何时关闭 SFSafariViewController
,方法是让自己成为演示控制器的代表并覆盖 presentationControllerDidDismiss(_:)
,然后向下滑动。查看有关此主题的 documentation。
注意:如果您以编程方式使用 dismiss(animated:)
,则不会调用此方法。
@Frankenstein 的回答对我有用,但我花了一段时间才正确设置我的代码,所以只想在这里添加一些代码片段
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 模拟器上观察到的。
我在 SFSafariViewController
上有一个委托,负责清理 safariViewControllerDidFinish
事件中的任务。在 iOS 13+ 中,用户可以向下滑动以关闭,但在这种情况下不会触发此事件。我不想通过启用 isModalInPresentation
.
有没有办法让 safariViewControllerDidFinish
在这种情况下触发,或者我如何检测用户向下滑动以关闭 Safari 视图控制器?
您可以知道用户何时关闭 SFSafariViewController
,方法是让自己成为演示控制器的代表并覆盖 presentationControllerDidDismiss(_:)
,然后向下滑动。查看有关此主题的 documentation。
注意:如果您以编程方式使用 dismiss(animated:)
,则不会调用此方法。
@Frankenstein 的回答对我有用,但我花了一段时间才正确设置我的代码,所以只想在这里添加一些代码片段
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 模拟器上观察到的。