SafariViewControllerDidFinish не срабатывает при смахивании вниз, чтобы закрыть

У меня есть представитель на SFSafariViewController который очищает задачи в safariViewControllerDidFinishсобытие. В iOS 13+ пользователь может провести пальцем вниз, чтобы закрыть, но в этом случае это событие не запускается. Я не хочу отключать этот жест, включивisModalInPresentation.

Есть ли способ сделать safariViewControllerDidFinish fire для этого случая, или как я могу обнаружить, что пользователь смахивает вниз, чтобы закрыть контроллер представления Safari?

1 ответ

Решение

Вы можете узнать, когда пользователь закрывает SFSafariViewController проведя пальцем вниз, сделав себя делегатом контроллера презентации и переопределив presentationControllerDidDismiss(_:). Ознакомьтесь с документацией по этой теме.

Примечание: этот метод не будет вызван, если вы используете 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.

Другие вопросы по тегам