在 Xcode8 中使用 swift
下面是我的view 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()
}
}
加载网页 View 时我没有看到任何指示器? 我做错了什么吗?
最佳答案
您正在使用 WKWebView
并实现了 UIWebView
委托(delegate)。它不会触发。您必须实现 WKWebView
协议(protocol)方法。
执行以下WKNavigationDelegate
协议(protocol)方法来识别开始加载 View 。这将在主框架导航开始时触发。
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!)
确保您的事件指示器颜色与WKWebView
背景颜色不同。变灰
使用主队列显示/隐藏事件指示器。
DispatchQueue.main.async {
activity.startAnimating()
}
DispatchQueue.main.async {
activity.stopAnimating()
}
如果您的 Web View 是白色,请使用 grey
颜色作为事件指示器。
var activity = UIActivityIndicatorView(activityIndicatorStyle: .gray)
关于ios - 为什么 webViewDidStartLoad 没有调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45050282/