加载 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 时显示图像的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift Webview 在加载时显示图像

在后台加载 Webview 时显示启动画面

iOS 4.2 如何在方向改变时显示不同的图像?

android中webview 怎么实现网页加载时显示加载进度

如何在android中将url加载到webview时显示进度?

android中webview 怎么实现网页加载时显示加载进度?