UIWebView:获取 Webview 内容大小?

Posted

技术标签:

【中文标题】UIWebView:获取 Webview 内容大小?【英文标题】:UIWebView : Get Webview Content size? 【发布时间】:2017-11-24 12:14:23 【问题描述】:

我已经在 webview 中加载了 html。我想动态更新网页视图中加载的文本的字体大小(增加或减少) 与 Apple News Article 应用程序中的相同。但根据我的设计,我需要停止 web 视图滚动并需要根据文本更新它的高度。所以我需要获取文章的内容大小,但我没有得到正确的。有人可以帮忙吗?

【问题讨论】:

你试过的提供代码!顺便说一句,***.com/questions/27850792/… 和 ***.com/questions/3936041/… 可能会有所帮助。 【参考方案1】:

当字体更改时,将 Webview 高度更改为 1,而不是为 Webview 获得正确的 offsetHeight

webView1.frame.size.height = 1
let size : String = self.webView1.stringByEvaluatingjavascript(from: "document.documentElement.offsetHeight")!

【讨论】:

【参考方案2】:

将以下代码行添加到您的webViewDidFinishLoad

        webView.layoutSubviews()
        webView.frame.size.height = 1
        webView.frame.size = webView.sizeThatFits(.zero)
        print("WebView Height : \(webView.scrollView.contentSize.height)")
        webViewHgtConst.constant = webView.scrollView.contentSize.height
        webView.scalesPageToFit = true
        webView.scrollView.isScrollEnabled = false
        webView.scrollView.maximumZoomScale = 1.0
        webView.scrollView.minimumZoomScale = 1.0

别忘了添加UIWebViewDelegate 并将YOUR_WEBVIEW.delegate = self 添加到您的viewDidLoad

希望对你有帮助

【讨论】:

【参考方案3】:

首先停止滚动:

         webView.scrollView.isScrollEnabled = false
         webView.scrollView.showsVerticalScrollIndicator = false
         webView.scrollView.showsHorizontalScrollIndicator = false
         webView.scrollView.bounces = false
         webView.loadHTMLString(dataHtmlString, baseURL: nil)

制作webView高度约束的出口,并通过计算其高度给出其值:

     webviewHeightConst.constant  = (dataHtmlString.htmlAttributedString()?.height(withConstrainedWidth: yourwidthcont))!

这个扩展计算高度

extension String 

func htmlAttributedString() -> NSAttributedString? 
    guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else  return nil 
    guard let html = try? NSMutableAttributedString(
        data: data,
        options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
        documentAttributes: nil) else  return nil 

    var found = false

    html.beginEditing()
    html.enumerateAttribute(NSFontAttributeName, in: NSMakeRange(0, html.length), options: NSAttributedString.EnumerationOptions(rawValue: 0))  (value, range, stop) in
        if (value != nil) 
                            let oldFont = value as! UIFont
                           let newFont = oldFont.withSize(16)
            html.addAttribute(NSFontAttributeName, value: newFont, range: range)
            found = true
        
    

    if !found
        // No font was found - do something else?
    
    html.endEditing()

    return html


【讨论】:

以上是关于UIWebView:获取 Webview 内容大小?的主要内容,如果未能解决你的问题,请参考以下文章

指定 UIWebView 内容大小或位置

UIWebView 内容宽度到自定义大小

UITableViewCell嵌套UIWebView并且cell根据webView的内容自适应

如何旋转 UIWebView 的内容?

当 Web 视图内容调整大小时确定 UIWebView 高度

带有 UIWebview 的 UITableViewCell,可根据内容大小调整高度