我使用UIScrollView并在底部放置一些UILabel和一个WKWebView。 WkWebView框架大小始终等于其contentSize,我禁用其userInteraction。我使用html字符串在WKWebView中显示数据。在将html字符串加载到WKWebView之前,我可以通过替换css中的关键字来更改WKWebView中的字体大小。
我的问题是当我增加字体大小时,WKWebView的scrollView.contentSize.height也会增加但是当我减小字体大小时,WKWebView的scrollView.contentSize.height没有减少。它始终记住它的最大价值。这在WKWebView和我的UIScrollView中留下了一个很大的空白区域。如何让WKWebView的scrollView.contentSize适合其内容?
这是我在WKWebView完成加载内容时调整UIScrollView大小的代码。
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print(webView.scrollView.contentSize.height)
self.webView.frame = CGRect(x: self.webView.frame.origin.x, y: self.webView.frame.origin.y, width: webView.scrollView.contentSize.width, height: webView.scrollView.contentSize.height)
self.scrollView.contentSize = CGSize(width: contentView.bounds.width, height: self.webView.frame.origin.y + webView.scrollView.contentSize.height)
}
答案 0 :(得分:0)
我通过将初始字体大小(小字体)的高度保存在变量中来处理它,并且在更改字体大小时,它返回大字体的正确高度,但是当再次返回小字体时没有返回正确的高度...。 那就是为什么我不在再次返回小字体后不计算字体,而是从我之前保存的变量中取值..
var webviewHeightForSmallFont : CGFloat = 0
webView.evaluateJavaScript("document.documentElement.scrollHeight", completionHandler: { (height, error) in
let h = height as! CGFloat
if self.textSize == 100 && self.webviewHeightForSmallFont == 0{
self.webviewHeightForSmallFont = h
}
if self.webviewHeightForSmallFont != 0 && self.textSize == 100 {
self.delegate!.webViewDidGotHeight(self.webviewHeightForSmallFont)
}
else if self.cellHeight != h {
self.delegate!.webViewDidGotHeight(h)
}
else if h == 0 {
self.delegate!.webViewDidFaildToGotHeight()
}
在上面的代码中, 100大小表示小字体,150表示大代码...并在代码的上面部分检查字体是否设置为小字体,并且没有其他值,则为0 ...然后将高度保存在webviewHeightForSmallFont
变量,如果它已经具有某个值并且字体很小,则使用该变量的最后一个上一个值...因为它可以很好地工作。