WKWebView contentSize高度在调整字体大小后不会改变

问题描述 投票:4回答:1

我使用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)
}
html ios swift uiscrollview wkwebview
1个回答
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 ...然后将高度保存在[ C0]变量,如果它已经有一些值并且字体很小,则使用该变量的最后一个上一个值...因为它可以很好地处理较大的变量。]​​>

© www.soinside.com 2019 - 2024. All rights reserved.