加载 Webview 时显示图像
Posted
技术标签:
【中文标题】加载 Webview 时显示图像【英文标题】:Show Image While Loading Webview 【发布时间】:2019-04-15 19:20:09 【问题描述】:我试图在加载 WKWebView 时显示图像(徽标)。
所以,查看其他帖子,我会在 ViewDidLoad() 中将图像放在屏幕上,并在 didFinish 方法中隐藏图像。但是,由于某种原因,didFinish 方法不起作用。它不会打印它已完成(尽管 web 视图确实显示在屏幕上)。为此,我也已经看过其他帖子。但是,这些主要建议设置 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 不起作用?我如何让它工作并在加载时显示图像?
【问题讨论】:
【参考方案1】:需要添加导航的委托
webView.navigationDelegate = self
class ViewController: UIViewController , WKUIDelegate , WKNavigationDelegate
【讨论】:
即使将其添加到我的 viewDidLoad 函数中,当 webview 显示时,它仍然不会显示“完成加载”注释。webView.navigationDelegate = self as? WKNavigationDelegate
这个self as? WKNavigationDelegate
是问题,让它self
作为答案并添加, WKNavigationDelegate
谢谢。现在它打印语句。我现在将尝试添加图像:)
为什么它会在我的手机上加载 web 视图几秒钟后打印语句?【参考方案2】:
首先,optional func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
是在WKNavigationDelegate
中声明的方法,因此您的类必须符合协议WKNavigationDelegate
并且您的代码必须类似于webView.navigationDelegate = self
其次,对于您在 cmets 中的另一个问题“为什么它会在我的手机上加载 web 视图几秒钟后打印语句?”
optional func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
在 webview 主机导航完成时调用,即 WKWebView 完全完成加载整个页面。
显示/隐藏加载图像的理想实现是,
-
符合 WKNavigationDelegate。
实现
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 加载失败。
【讨论】:
以上是关于加载 Webview 时显示图像的主要内容,如果未能解决你的问题,请参考以下文章
android中webview 怎么实现网页加载时显示加载进度