Загрузите WKWebView в фоновом режиме - PullRequest
0 голосов
/ 17 сентября 2018

Есть ли способ загрузить WKWebView в фоновом режиме или за его пределами, чтобы я мог скрыть загрузку за другим видом?

1 Ответ

0 голосов
/ 17 сентября 2018

Вы можете добавить WKWebView к иерархии представлений , но его x соответствует вашей текущей ширине , поэтому он располагается вне экрана, но в иерархии рендеринга.

Добавьте WKNavigationDelegate в свой класс и добавьте его в веб-представление как

webView.navigationDelegate = self

Затем реализуйте следующую функцию:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation)

Эта функция и некоторые другие называютсякогда веб-просмотр завершил загрузку контента, НО это не включает в себя 100% законченный рендеринг .После этого все еще требуется некоторое время для рендеринга, потребление времени для которого зависит от загруженного контента.

В настоящее время обратного вызова для 100% -ной законченной загрузки и рендеринга нет, поэтому, если вы знаете файлыВы можете рассчитать или использовать фиксированную задержку перед перемещением веб-вида в видимый прямоугольник.

ИЛИ

Если вам это нравится, вы наблюдаете личные значения в веб-представлении и перемещаете веб-представление после того, какэти значения изменяются в вашем предпочтительном состоянии.Например, это выглядит так:

class MyCustomWKWebView: WKWebView {

func setupWebView(link: String) {
    let url = NSURL(string: link)
    let request = NSURLRequest(url: url! as URL)
    load(request as URLRequest)
    addObserver(self, forKeyPath: "loading", options: .new, context: nil)
}

override public func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {

    guard let _ = object as? WKWebView else { return }
    guard let keyPath = keyPath else { return }
    guard let change = change else { return }

    switch keyPath {
    case "loading":
        if let val = change[NSKeyValueChangeKey.newKey] as? Bool {
            //do something!
        }
    default:
        break
    }
}

deinit {
    removeObserver(self, forKeyPath: "loading")
}
}
...