【问题标题】:How to hide the done button and search bar in SafariViewController如何在 SafariViewController 中隐藏完成按钮和搜索栏
【发布时间】:2016-04-14 02:45:47
【问题描述】:

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

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

注意:链接到这个问题,但答案是一个 hack,而我正在寻找使用 SafariViewController API 的解决方案:SFSafariViewController: Hide navigation bar

【问题讨论】:

    标签: ios swift sfsafariviewcontroller


    【解决方案1】:

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

    AppCoda tutorial on WKWebView 向您展示了如何使用嵌入的 WKWebView 创建 ViewController。希望对您有所帮助!

    【讨论】:

    • 谢谢,是的,这也是我发现的。简单的一个=)
    【解决方案2】:

    为丑陋和脆弱做好准备:

    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)
        }
    }
    

    很明显,你需要修复 iPhone X 才能或多或少地工作。

    UPD:Sharon 在下面(在 cmets 中)暗示这样的黑客 很可能导致应用被苹果拒绝。

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

    【讨论】:

    • 根据文档:根据 App Store Review Guidelines,此视图控制器必须用于向用户展示信息;控制器不能被其他视图或层隐藏或遮挡。此外,应用不得在未经用户知情和同意的情况下使用 SFSafariViewController 跟踪用户。
    • 所以你可以自己做一个答案。一个紧凑的说法:“你不能”
    猜你喜欢
    • 1970-01-01
    • 2017-04-05
    • 2016-05-02
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多