ios - 在后台/关闭屏幕中加载 WKWebView
问题描述
有没有办法在后台/屏幕外加载 WKWebView 以便我可以将加载隐藏在另一个视图后面?
解决方案
您可以将WKWebView 添加到视图层次结构中,但它的x 是您当前的 width,因此它在屏幕之外但在渲染层次结构中。
将WKNavigationDelegate添加到您的类并将其添加到 webView 中
webView.navigationDelegate = self
然后实现以下功能:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation)
这个函数和其他一些函数在 webview 完成加载内容时被调用,但是这不包括 100%finished rendering。之后仍然需要一些时间来渲染,时间消耗取决于加载的内容。
目前没有回调 100% 完成加载和渲染,所以如果你知道文件,你可以在将 webView 移动到可见矩形之前计算或使用修复延迟。
或者
如果您对此感觉良好,您可以在 webview 中观察私有值,并在这些值更改为您的首选状态后移动您的 webview。这看起来像这样:
class MyCustomWKWebView: WKWebView {
func setupWebView(link: String) {
let url = NSURL(string: link)
let request = NSURLRequest(url: url! as URL)
load(request as URLRequest)
addObserver(self, forKeyPath: "loading", options: .new, context: nil)
}
override public func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard let _ = object as? WKWebView else { return }
guard let keyPath = keyPath else { return }
guard let change = change else { return }
switch keyPath {
case "loading":
if let val = change[NSKeyValueChangeKey.newKey] as? Bool {
//do something!
}
default:
break
}
}
deinit {
removeObserver(self, forKeyPath: "loading")
}
}
推荐阅读
- angular - 如何使用angular2获取检查和取消选中的值
- python - 将字典转换为 Numpy 数组
- mysql - 如何在 MySQL 中执行全文搜索连接多个表
- mplab - MPLAB 以外的 IC 24AA64I/SN 编程器?
- ios - 对 .well-known/apple-app-site-association 的请求过多 - 是否推荐使用 Cache 标头?
- function - 获取泛型函数的类型而不调用打字稿中的函数
- python - 计算平均值并附加到新数组numpy
- javascript - 使用 jquery.rules 时表单验证不起作用
- microservices - 我应该为带有嵌入式 UI 的 Web 应用程序使用 api 网关吗?
- git - 避免添加空合并