Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to hide the done button and search bar in SafariViewController

I'm using SafariViewControllerto display a webpage, and rather than the default "done" button I push from my app's NavigationController to preserve my nav stack and back arrow. However, I need to hide the default Done button and search bar on the SafariViewController. Is that possible yet? See my code and screen shot below...

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

enter image description here

note: linking to this question, but the answer is a hack whereas I was looking for a solution using SafariViewController API : SFSafariViewController: Hide navigation bar

like image 288
GarySabo Avatar asked Apr 14 '16 02:04

GarySabo


2 Answers

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!

like image 99
BAP Avatar answered Oct 25 '22 23:10

BAP


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.

like image 31
Anton Tropashko Avatar answered Oct 25 '22 22:10

Anton Tropashko