ios - 在后台/屏幕外加载 WKWebView

标签 ios swift wkwebview

有没有办法在后台/屏幕外加载 WKWebView,这样我就可以将加载隐藏在另一个 View 后面?

最佳答案

您可以将 WKWebView 添加到 View 层次结构,但它的x 是您当前的宽度,因此它位于屏幕之外但在呈现层次结构内。

WKNavigationDelegate 添加到您的类中并将其添加到webView 中

webView.navigationDelegate = self

然后实现如下功能:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation)

当 webview 完成加载内容时调用此函数和其他一些函数,但这不包括 100% 完成的呈现。之后还需要一些时间进行渲染,具体耗时取决于加载的内容。

目前没有 100% 完成加载和渲染的回调,所以如果你知道这些文件,你可以在将 webView 移动到可见矩形之前计算或使用修复延迟。

如果您对此感觉良好,您可以在 webview 中观察私有(private)值,并在这些值更改为您的首选状态后移动您的 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")
}
}

关于ios - 在后台/屏幕外加载 WKWebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52369353/

相关文章:

ios - 如何从 NSString 中捕获最后 4 个字符

iphone - 基于 TabBar 的应用程序中的注销问题

ios - 如何在 google place picker api 中 swift 将国家与地址分开

ios - 通过 JavaScript 事件观察 WKWebView URL 更改的问题

SwiftUI 如何在 WKWebView 中添加事件指示器?

ios - 尝试从 unwind segue 添加新的 webView 时如何清除 WKWebView?

ios - Swift Playground iPad 相机访问

ios - 同一 Storyboard 中 iPhone 和 iPad 的不同布局

ios - 将方法签名从 Objective-C 转换为 Swift

WKWebView 中的 Javascript - evaluateJavaScript 与 addUserScript