【问题标题】:Show SVProgressHUD while UIWebView loadsUIWebView 加载时显示 SVProgressHUD
【发布时间】:2019-05-19 13:58:41
【问题描述】:

我将UIWebView 设置为ViewController 中的视图。我想在网页加载时显示SVProgressHUD 活动指示器,然后在完成后将其关闭,但我似乎无法让它工作。网页加载正常,但指示器从未显示。 我知道SVProgressHUD 设置正确且功能正常,但不在我拥有的功能中。

我相信因为我实际上在 IB 的场景中没有 UIWebView,而是 ViewController 将视图设置为 UIWebView,所以我使用的代码无法定位它。如果我错了,请纠正我。

这是我的代码:

import UIKit
import SVProgressHUD

class ViewController: UIViewController, UIWebViewDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()



        if let url = URL(string: "https://www.google.com") {
            let webView = UIWebView(frame: self.view.frame)
            let urlRequest = URLRequest(url: url)
            webView.loadRequest(urlRequest as URLRequest)
            webView.scalesPageToFit = true;
            webView.scrollView.showsHorizontalScrollIndicator = false;
            webView.scrollView.showsVerticalScrollIndicator = false;
            self.view.addSubview(webView)


        }
    }

    func webViewDidStartLoad(_ webView: UIWebView) {
        SVProgressHUD.show()
    }
    func webViewDidFinishLoad(_ webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
    func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
        SVProgressHUD.dismiss()
    }
}

非常感谢任何帮助。

【问题讨论】:

  • 为 webView 设置代理 webview.delegate = self

标签: ios swift uiview uiwebview svprogresshud


【解决方案1】:

UIWebView弃用,请使用WKWebView

import UIKit
import WebKit
import SVProgressHUD

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        if let url = URL(string: "https://www.google.com") {
            let webView = WKWebView(frame: self.view.frame)
            webView.navigationDelegate = self
            self.view.addSubview(webView)
            webView.load(URLRequest(url: url))
            SVProgressHUD.show()
        }
    }
}

extension ViewController: WKNavigationDelegate {
    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
        print(error.localizedDescription)
        SVProgressHUD.dismiss()
    }

    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
        print("Strat to load")
    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        print("finish to load")
        SVProgressHUD.dismiss()
    }
}

【讨论】:

    【解决方案2】:

    你忘记绑定代理了,所以在下面添加这个

    webview.delegate = self
    

    注意

    UIWebView 已弃用,因此请使用WKWebView

    【讨论】:

    • 如果我要更改为 WKWebView,我将如何实现我在这里尝试实现的相同目标。
    • 相反,我再次编写代码,here 是干净的示例,请参考此/第二,我在这里尝试了示例,并且在绑定委托时没有出现错误的原因。它也有效
    • 非常感谢。我将继续使用 WKWebView。我删除了关于错误的评论,因为我意识到我把它放在了错误的地方。
    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    相关资源
    最近更新 更多