我正在尝试在加载WKWebView时显示图像(徽标)。
因此,查看其他帖子,我会在ViewDidLoad()的屏幕上放置一个图像,并在didFinish方法中隐藏图像。但是,由于某种原因,didFinish方法不起作用。它没有打印完成(虽然webview确实显示在屏幕上)。为此,我也已经查看了其他帖子。但是,这些主要建议设置WKWebView的委托(我做过)。这是我的代码:
import UIKit
import Foundation
import WebKit
class ViewController: UIViewController, WKUIDelegate {
var webView: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let myURL = URL(string:"https://www.mijnmedicijn.nl/")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
func webView(_ webView: WKWebView,
didFinish navigation: WKNavigation!){
print("Webview did finish load")
}
func webView(_ webView: WKWebView,
didStart navigation: WKNavigation!){
print("Webview did start laoding")
}
}
我究竟做错了什么?为什么didFinish没有工作?如何在加载时使其工作并显示图像?
您需要添加导航的委托
webView.navigationDelegate = self
class ViewController: UIViewController , WKUIDelegate , WKNavigationDelegate {
首先,optional func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
是在WKNavigationDelegate
中声明的方法,因此你的类必须符合协议WKNavigationDelegate
,你的代码必须看起来像webView.navigationDelegate = self
其次,对于你在评论中的另一个问题“为什么它会在我的手机上加载webview后几秒钟打印语句?”
当webview大型机导航完成时调用optional func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
,即WKWebView完全加载整个页面。
显示/隐藏加载图像的理想实现方式是,
optional func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!)
并编写代码以在此函数中显示加载图像。一旦WKWebView启动大型机导航,就会调用此函数。optional func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!)
并编写代码以隐藏此函数中的加载图像。一旦内容开始到达WKWebView,就会调用此函数。optional func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error)
并编写代码来隐藏此函数中的加载图像。应该实现此功能只是在案例URL加载失败。