Я пытаюсь получить правильную высоту и ширину моего WKWebview
контента, чтобы установить высоту контейнера веб-просмотра для контента веб-просмотра.Я уже перепробовал множество решений, найденных при переполнении стека.
С этим кодом контейнер имеет правильную высоту, но ширина веб-просмотра слишком велика (как если бы веб-просмотр был увеличен)
override func viewDidLoad() {
let webConfiguration = WKWebViewConfiguration()
let customFrame = CGRect.init(origin: CGPoint.zero, size: CGSize.init(width: 0.0, height: self.viewForWebview.frame.size.height))
self.webView = WKWebView (frame: customFrame , configuration: webConfiguration)
webView.translatesAutoresizingMaskIntoConstraints = false
self.viewForWebview.addSubview(webView)
NSLayoutConstraint.activate([
self.webView.topAnchor.constraint(equalTo: self.viewForWebview.topAnchor),
self.webView.bottomAnchor.constraint(equalTo: self.viewForWebview.bottomAnchor),
self.webView.leadingAnchor.constraint(equalTo: self.viewForWebview.leadingAnchor),
self.webView.trailingAnchor.constraint(equalTo: self.viewForWebview.trailingAnchor)
])
webView.uiDelegate = self
webView.navigationDelegate = self
webView.scrollView.isScrollEnabled = false
let bodyHtml = "<html><head><meta name=\"viewport\" content=\"initial-scale=1.0\" />" + htmlString + "</body></html>";
webView.loadHTMLString(bodyHtml, baseURL: Bundle.main.resourceURL)
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
self.heightWebviewConstraint.constant = self.webView.scrollView.contentSize.height
self.view.setNeedsLayout()
self.view.setNeedsUpdateConstraints()
}
Вместо добавления тега <head>
я также попытался использовать evaluateJavaScript
, но в этом случае контейнер высоты слишком велик, а ширина веб-просмотра слишком велика.
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
self.webView.evaluateJavaScript("document.readyState", completionHandler: { (complete, error) in
if complete != nil {
self.webView.evaluateJavaScript("document.body.offsetHeight", completionHandler: { (height, error) in
self.heightWebviewConstraint.constant = height as! CGFloat
self.view.setNeedsLayout()
self.view.setNeedsUpdateConstraints()
})
}
})
}
Я такжепопытался добавить определенный стиль CSS (без viewport
и без evaluateJavaScript
), в этом случае ширина веб-просмотра в порядке, но контейнер высоты слишком мал (мое веб-представление обрезано сверху и снизу).
let bodyHtml = "<html><head> <style> img { width:auto; height:auto; max-width:100%; </style></head><body>" + htmlString + "</body></html>"
Я потерян со всеми этими решениями.