В моем приложении я использую WKWebView
, который загружает веб-страницы со статическим содержимым.
Я хочу знать высоту contentSize
, как только веб-страница полностью отобразится в WKWebView
.
Поэтому я подумал, что мог бы использовать для этого делегат webView:didFinishNavigation:
:
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {
@IBOutlet weak var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webView.navigationDelegate = self
webView.uiDelegate = self
webView.load(URLRequest(url: URL(string: "https://www.rockade.nl/testpage/testpage.php")!))
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("finished loading: height=\(webView.scrollView.contentSize.height)")
}
}
Моя проблема с этим кодом заключается в том, что этот делегат называется до страница полностью отрисована, поэтому я получаю разные результаты для высоты, даже значения 0.
Когда я добавляю небольшую задержку, я получаю правильные результаты, но это похоже на хак.
Использование такого наблюдателя, как этот
var myContext = 0
webView.scrollView.addObserver(self, forKeyPath: "contentSize", options: .new, context: &myContext)
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if context == &myContext {
print(webView.scrollView.contentSize.height)
} else {
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
}
}
}
, мне тоже не помогает, потому что я действительно должен быть уверен, что полученное значение является конечной высотой.
Полезно знать: У меня нет контроля над веб-страницами, поэтому использование javascript не вариант.
Я надеюсь, что кто-то может указать мне правильное направление!