在后台/关闭屏幕中加载WKWebView

詹姆斯·塞德曼

有没有一种方法可以在后台/屏幕外加载WKWebView,以便可以将加载隐藏在另一个视图后面?

Viktor_DE

您可以将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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章