如何在 SafariViewController 中隐藏完成按钮和搜索栏

How to hide the done button and search bar in SafariViewController

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

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

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

如果您需要自定义浏览器界面,请按 Apple's documentation on SFSafariViewController, there does not appear to be a publicly-accessible way to hide either the Done button or the URL bar. Apple suggests that you use WKWebView

有一个 AppCoda tutorial on WKWebView 向您展示了如何创建带有嵌入式 WKWebViewViewController。希望对您有所帮助!

为丑陋和脆弱做好准备:

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

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

UPD:Sharon 在下方(在评论中)暗示这样的 hackery 很可能导致app被苹果拒绝

我很乐意看到 Apple 使用 .none 完成按钮样式来解决这个问题 iOS 14.

可用