Показать изображение при загрузке Webview - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь показать изображение (логотип) во время загрузки WKWebView.

Итак, просматривая другие сообщения, я помещал изображение на экран в ViewDidLoad () и скрывал изображение в методе didFinish.Но по какой-то причине метод didFinish не работает.Он не печатает, что он закончил (хотя веб-просмотр действительно появляется на экране).Для этого я тоже уже посмотрел другие посты.Но они в основном предлагают установить делегата 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")

    }
}

Что я делаю не так?Почему не работаетфиниш?Как мне заставить это работать и показывать изображение при загрузке?

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Вам необходимо добавить делегата навигации

webView.navigationDelegate = self

class ViewController: UIViewController , WKUIDelegate , WKNavigationDelegate {
0 голосов
/ 16 апреля 2019

Во-первых, optional func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) - это метод, объявленный в WKNavigationDelegate, следовательно, ваш класс должен соответствовать протоколу WKNavigationDelegate, а ваш код должен выглядеть как webView.navigationDelegate = self

Во-вторых, для вашего другого вопроса вcomments «Почему он печатает заявление через несколько секунд после того, как веб-просмотр уже загружен на мой телефон?»

optional func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) вызывается, когда навигация по мэйнфрейму веб-просмотра завершена, т.е. WKWebView полностью завершает загрузку всей страницы.

Идеальная реализация для отображения / скрытия загрузочного изображения:

  1. Соответствует WKNavigationDelegate.
  2. Реализуйте optional func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) и напишите код для отображения загрузочного изображения в этой функции.Поскольку эта функция вызывается, как только WKWebView запускает навигацию по мэйнфрейму.
  3. Реализуйте optional func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) и напишите код, чтобы скрыть загрузочное изображение в этой функции.Поскольку эта функция вызывается, как только содержимое начинает поступать в WKWebView.
  4. Также реализуйте optional func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) и напишите код, чтобы скрыть загрузочное изображение в этой функции.Эта функция должна быть реализована при неудачной загрузке URL.
...