Как нажать SFSafariViewController?

2 странные вещи случаются, когда я пытаюсь нажать Safari ViewController:

  • Его адресная панель с кнопкой "Готово" находится под моей навигационной панелью;

  • Метод делегата safariViewControllerDidFinish: не вызывается при нажатии кнопки возврата.

Я не думаю, что Apple одобрит это поведение, поэтому:

Есть ли способ отключить Safari ViewController без этих проблем?

Ответ 1

Не нажимайте SFSafariViewController с помощью метода pushViewController:animated:, вместо этого используйте метод presentViewController:animated:completion:.

Контроллер просмотра Safari будет представлен стандартной анимацией push.

Ответ 2

В дополнение к комментарию rckoenes единственная другая опция, которую я вижу, - это скрыть панель навигации при представлении SFSafariViewController

import UIKit
import SafariServices

class ViewController: UIViewController {
    @IBAction func openBrowser(sender: AnyObject) {
        let safariViewController = SFSafariViewController(URL: NSURL(string: "http://your.url")!)
        safariViewController.delegate = self

        // hide navigation bar and present safari view controller
        navigationController?.navigationBarHidden = true
        navigationController?.pushViewController(safariViewController, animated: true)
    }
}

extension ViewController: SFSafariViewControllerDelegate {
    func safariViewControllerDidFinish(controller: SFSafariViewController) {
        // pop safari view controller and display navigation bar again
        navigationController?.popViewControllerAnimated(true)
        navigationController?.navigationBarHidden = false
    }
}