我正在尝试使用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
}
}
有人可以帮我解决这个问题吗?
答案 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:)
执行多次,这也是多余的。