JavaScript — высота содержимого WKWebView не обновляется с альбомной на портретную

Высота содержимого WKWebView не обновляется с альбомной на портретную

У меня есть WKWebView внутри TableViewCell в качестве его contentView. Есть некоторый контент HTML, который загружается в WKWebView. Чтобы размер шрифта оставался неизменным при изменении ориентации устройства, я устанавливаю настройку размера в файл CSS, подобный этому.

 html {-webkit-text-size-adjust:none} 

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

Я использую следующий метод делегата, чтобы получить высоту содержимого в WKWebView.

 func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { webView.evaluateJavaScript("document.readyState", completionHandler: { [weak self] (result, error) in if (result as? String) == "complete" { webView.evaluateJavaScript("document.body.offsetHeight", completionHandler: { [weak self] (result, error) in self?.viewHeight = (result as? CGFloat) ?? 0.0 self?.contentWebView.scrollView.isScrollEnabled = false self?.webViewRendered?() }) } }) } 

webViewRendered — это метод обратного вызова, который устанавливает высоту UITableViewCell .

На ориентации устройства представление таблицы изменений перезагружается для обновленных данных.

 override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { super.traitCollectionDidChange(previousTraitCollection) tableView.reloadData() } 

Может кто-нибудь подсказать мне, почему document.body.offsetHeight не меняется при изменении ориентации устройства.

Еще одно дополнение: если я запускаю приложение в альбомной ориентации, а затем поворачиваю его в книжную ориентацию, оно корректно корректируется, но повторное вращение его в альбомную ориентацию не работает, а если я начинаю с портретной ориентации и поворачиваю его в альбомную ориентацию, оно не корректируется должным образом. Это означает, что поворот от портрета до пейзажа не дает правильного результата в этой строке

 self?.viewHeight = (result as? CGFloat) ?? 0.0 
Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector