13

SafariViewController用来显示网页,而不是我从应用程序中推送的默认“完成”按钮,NavigationController以保留我的导航堆栈和后退箭头。但是,我需要隐藏SafariViewController. 这可能吗?请参阅下面的代码和屏幕截图...

let svc = SFSafariViewController(URL: pinterestSafariURL)
            navigationController?.pushViewController(svc, animated: true)

在此处输入图像描述

注意:链接到这个问题,但答案是一个黑客,而我正在寻找使用 SafariViewController API 的解决方案:SFSafariViewController:隐藏导航栏

4

2 回答 2

10

根据Apple 关于 的文档SFSafariViewController似乎没有公开可访问的方式来隐藏“完成”按钮或 URL 栏。如果您需要自定义浏览器界面,Apple 建议您使用WKWebView 。

WKWebView 上有一个AppCoda 教程,向您展示了如何创建一个ViewController嵌入的WKWebView. 希望有帮助!

于 2016-04-15T18:15:56.333 回答
1

为丑陋和脆弱做好准备:

extension MyViewController: SFSafariViewControllerDelegate
{
    func safariViewController(_ controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool)
    {
        let f = CGRect(origin: CGPoint(x: 0, y: 20),
                       size: CGSize(width: 90, height: 44))
        let uglyView = UIView(frame: f)
        uglyView.backgroundColor = svc.view.backgroundColor
        controller.view.addSubview(uglyView)
    }
}

显然起源 y 需要修复 iPhone X 才能或多或少地工作。

UPD:Sharon 在下面(在评论中)暗示这样的黑客行为可能会导致应用程序被苹果拒绝。

我很乐意看到 Apple 使用 iOS 14 中可用的 .none done 按钮样式解决此问题。

于 2019-07-04T08:37:16.473 回答