How to hide the done button and search bar in SafariViewController

Per 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 if you need a custom browser interface.

There's a AppCoda tutorial on WKWebView that shows you how to create a ViewController with an embedded WKWebView. Hope that helps!


Brace yourself for ugliness and brittleness:

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

obviously origin y needs fixin' for iPhone X for this to work more or less.

UPD: Sharon implies down below (in the comments) that such a hackery is likely to cause the app rejected by apple.

I'd love to see Apple fix this with .none done button styling available in iOS 14.