有没有一种方法可以在后台/屏幕外加载WKWebView,以便可以将加载隐藏在另一个视图后面?
您可以将WKWebView添加到视图层次结构中,但是它的x是您当前的宽度,因此它位于屏幕之外,但位于呈现层次结构中。
将WKNavigationDelegate添加到您的类并将其添加到webView
webView.navigationDelegate = self
然后实现以下功能:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation)
当webview完成加载内容时,将调用此函数和其他函数,但不包括100%完成渲染。此后,仍然需要一些时间进行渲染,此过程的时间消耗取决于所加载的内容。
当前没有100%完成加载和渲染的回调,因此,如果您知道文件,则可以在将webView移至可见区域之前计算或使用修复延迟。
要么
如果对此感到满意,则可以在Web视图中观察私有值,并在这些值更改为首选状态后移动Web视图。例如,如下所示:
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")
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句