I'm using SafariViewController
to 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)
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With