【问题标题】:How to push SFSafariViewController?如何推送 SFSafariViewController?
【发布时间】:2015-12-12 19:01:44
【问题描述】:

当我尝试推送 Safari ViewController 时发生了 2 件奇怪的事情:

  1. 其带有完成按钮的地址栏位于我的导航栏下方;

  2. 委托方法 safariViewControllerDidFinish: 当我按下返回按钮时没有被调用。

我认为 Apple 不会赞成这种行为,所以:

有没有办法在没有这些问题的情况下推送 Safari ViewController?

【问题讨论】:

  • 文档中没有说明,只能以模态方式呈现视图。你不应该推入导航控制器。

标签: ios safari ios9


【解决方案1】:

不要使用pushViewController:animated: 方法推送SFSafariViewController,而是使用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
    }
}

【讨论】:

  • 推送似乎工作正常,但 SFSafariViewController 正在关闭呈现的视图控制器,有什么方法可以避免吗?
猜你喜欢
  • 1970-01-01
  • 2022-07-27
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
相关资源
最近更新 更多