在 background/off 屏幕中加载 WKWebView
Load WKWebView in background/off screen
有没有办法在 background/off-screen 中加载 WKWebView 以便我可以将加载隐藏在另一个视图后面?
您可以将 WKWebView 添加到视图层次结构,但它的 x 是您当前的宽度,因此它位于屏幕之外,但是在呈现层次结构中。
将 WKNavigationDelegate 添加到您的 class 并将其添加到 webView,如
webView.navigationDelegate = self
然后实现以下功能:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation)
当 webview 完成加载内容时调用此函数和其他一些函数,但这不包括 100% 完成的渲染。之后还需要一些时间来渲染,这个耗时取决于加载的内容。
目前没有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")
}
}
有没有办法在 background/off-screen 中加载 WKWebView 以便我可以将加载隐藏在另一个视图后面?
您可以将 WKWebView 添加到视图层次结构,但它的 x 是您当前的宽度,因此它位于屏幕之外,但是在呈现层次结构中。
将 WKNavigationDelegate 添加到您的 class 并将其添加到 webView,如
webView.navigationDelegate = self
然后实现以下功能:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation)
当 webview 完成加载内容时调用此函数和其他一些函数,但这不包括 100% 完成的渲染。之后还需要一些时间来渲染,这个耗时取决于加载的内容。
目前没有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")
}
}