在WKWebView中加载页面后,UIActivityIndi​​cator不会隐藏

时间:2018-02-20 10:12:49

标签: swift wkwebview uiactivityindicatorview

我正在尝试使用WKWebView(在Xcode 9中)创建一个UIActivityIndicator应用。下面是我的代码,但是当我尝试模拟它时,活动指示器不会停止,也不会隐藏。

import UIKit
import WebKit

class ViewController: UIViewController {
    @IBOutlet var loader: UIActivityIndicatorView!
    @IBOutlet var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let url = URL(string: "http://www.amritvani.nl")
        let request = URLRequest(url: url!)
        webView.navigationDelegate = self as? WKNavigationDelegate
        webView.load(request)
    }

    func webViewDidStartLoad(webView: WKWebView){
        loader.startAnimating()
    }

    func webViewDidFinishLoad(webView: WKWebView){
        loader.stopAnimating()
        loader.hidesWhenStopped = true
    }
}

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您的委托方法错误。将webViewDidStartLoad(webView:)替换为:

func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
    loader.startAnimating()
}

...和webViewDidFinishLoad(webView:)与此:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    loader.stopAnimating()
}

此外,您应该将班级与WKNavigationDelegate

相符
class ViewController: UIViewController, WKNavigationDelegate

您的代码还有两个问题。首先,如果已经符合WKNavigationDelegate,则不应该将您的班级投放到as? {/ 1}}:

webView.navigationDelegate = self

其次,您应该在停止之前将活动指示符的hidesWhenStopped属性设置为true ,最好是在Interface Builder或viewDidLoad中。这并不重要,但如果其他人阅读您的代码会更有意义,如果webView(_:didFinish:)执行多次,这也是多余的。