如何在 SafariViewController 中隐藏完成按钮和搜索栏
Posted
技术标签:
【中文标题】如何在 SafariViewController 中隐藏完成按钮和搜索栏【英文标题】:How to hide the done button and search bar in 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
【问题讨论】:
【参考方案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 跟踪用户。 所以你可以自己做一个答案。一个紧凑的说法:“你不能”以上是关于如何在 SafariViewController 中隐藏完成按钮和搜索栏的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SafariViewController 快速获取文本到我们的应用程序?
区分来自 MobileSafari 与 SafariViewController 的请求
在 UIWebview 之类的 ViewController 中使用 SafariViewController
通过 SafariViewController 安装 MDM 配置文件