Высота содержимого WKWebView не обновляется с альбомной на портретную - PullRequest
0 голосов
/ 17 октября 2019

У меня есть 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
...