如何监控Swift中的WKWebView页面加载进度?

问题描述 投票:4回答:1

这是我的代码:

@IBOutlet weak var webView: WKWebView!
@IBOutlet weak var progressView: UIProgressView!

override func viewDidLoad() {
    super.viewDidLoad()

    webView.uiDelegate = self
    webView.navigationDelegate = self

    webView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)        
}

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if (keyPath == "estimatedProgress") {
        progressView.setProgress(Float(webView.estimatedProgress), animated: true)
        print(webView.estimatedProgress)
    }
}

但是,估计进度只显示两个浮点数(0.1和1.0)而且我觉得它不起作用。我使用了Alamofire的进度,它改变了几毫秒,使我的UI更好,但这段代码不能正常工作......

有谁可以帮助我进行webView的进展?

ios xcode8 swift4
1个回答
6
投票

Swift 4.0

@IBOutlet weak var webView: WKWebView!
@IBOutlet weak var progressView: UIProgressView!
override func viewDidLoad() {
    super.viewDidLoad()

    // load website or HTML page
    self.webView.load(NSURLRequest(url: URL(string: "https://www.apple.com")!) as URLRequest);

    //add observer to get estimated progress value
    self.webView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil);
}

// Observe value
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == "estimatedProgress" {
        print(self.webView.estimatedProgress);
        self.progressView.progress = Float(self.webView.estimatedProgress);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.