为什么webViewDidStartLoad没有调用?

时间:2017-07-12 06:44:20

标签: ios swift

将swift与Xcode8一起使用

以下是我的视图controller.swift

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {
    var XWebview: WKWebView!
    var activity = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge)

    override func loadView() {
        super.loadView()
        self.XWebview = WKWebView()
        self.XWebview.navigationDelegate = self
        self.view = self.XWebview
    }

    override func viewDidLoad() {
        XWebview.navigationDelegate = self
        activity.center = self.view.center
        activity.color = UIColor.gray
        XWebview.addSubview(activity)

        super.viewDidLoad()

        let XURL = NSURL(string: "http://www.yahoo.com")


        let XURLRequest = NSURLRequest(url: XURL! as URL)
        XWebview.load(XURLRequest as URLRequest)
    }

    override var prefersStatusBarHidden: Bool {
        return true
    }

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

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

加载网页视图时我没有看到任何指示? 我做错了吗?

1 个答案:

答案 0 :(得分:2)

您正在使用WKWebView并实施了UIWebView委托。它不会触发。您必须实现WKWebView协议方法。

实现以下WKNavigationDelegate协议方法以确定开始加载视图。这将在主框架导航开始时触发。

func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!)

确保您的活动指示器颜色与WKWebView背景颜色不同。把它变成灰色

使用主队列显示/隐藏活动指示器。

 DispatchQueue.main.async {
    activity.startAnimating()
 }

 DispatchQueue.main.async {
    activity.stopAnimating()
 }

如果您的网络视图为白色,请使用grey颜色作为活动指示。

var activity = UIActivityIndicatorView(activityIndicatorStyle: .gray)