Как нажать SFSafariViewController?
Когда я пытаюсь нажать Safari ViewController, происходят 2 странные вещи:
Его адресная строка с кнопкой "Готово" находится под моей панелью навигации;
Метод делегата safariViewControllerDidFinish: не вызывается при нажатии кнопки назад.
Я не думаю, что Apple одобрит это поведение, поэтому:
Есть ли способ подтолкнуть Safari ViewController без этих проблем?
2 ответа
Решение
Не выдвигайте SFSafariViewController с помощью pushViewController:animated:
вместо этого используйте метод presentViewController:animated:completion:
метод.
Контроллер представления Safari будет представлен со стандартной анимацией push.
В дополнение к комментариям 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
}
}