我正在尝试在加载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不起作用?加载时如何使它工作并显示图像?
答案 0 :(得分:1)
您需要添加导航的代表
webView.navigationDelegate = self
class ViewController: UIViewController , WKUIDelegate , WKNavigationDelegate {
答案 1 :(得分:0)
首先,optional func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
是在WKNavigationDelegate
中声明的方法,因此您的类必须符合协议WKNavigationDelegate
,并且代码必须类似于webView.navigationDelegate = self
第二,对于您在评论中的另一个问题:“为什么在我的手机上已加载Web视图后,它会在几秒钟后打印该语句?”
当Webview大型机导航完成(即WKWebView完全完成整个页面的加载)时,将调用optional func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
。
显示/隐藏加载图像的理想实现是
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加载失败的情况下实施。