使用图像计算UIWebView高度给出了错误的答案

时间:2015-06-09 13:09:12

标签: swift uiwebview height

我找到了如何根据其内容计算动态uiwebview高度。我的代码是:

  println("webViweDidFinish started")

    var frame:CGRect = myWebView.frame

    frame.size.height = 1

    var fittingSize :CGSize = myWebView.sizeThatFits(CGSizeZero)

    frame.size = fittingSize

    myWebView.frame = frame


    var contentsizeHeight = webView.scrollView.contentSize.height

    var yCoordinateOfWebView = myWebView.frame.origin.y


    var contentHeight: CGFloat = webView.scrollView.contentSize.height;

    myScrollView.contentSize = CGSizeMake(self.view.frame.width, yCoordinateOfWebView + contentsizeHeight + labelAuthorOfArticle.frame.height) //

    UIView.animateWithDuration(0.5, animations: {
        self.heightConstraints.constant = fittingSize.height

        self.myWebView.layoutIfNeeded()

        self.myScrollContentView.layoutIfNeeded()

    })



    self.activityIndicator.stopAnimating()

如果我使用这种方法:

        var height:NSString! = webView.stringByEvaluatingJavaScriptFromString("document.height;")

    var heightInFloat = height.floatValue

如何将身高转换为CGFloat?我只能将它转换为浮动,如你所见。

问题是当webview有太多图像时,高度计算错误。相反,当没有图像高度时,计算正确。当我重新加载该功能时,第二次计算正确(带图像)。这是我正在加载的字符串的内容:

 class func formatContentText(inout text: NSString)-> NSString{

    text = text.stringByReplacingOccurrencesOfString("src=\"", withString: "src=\"http://dixinews.kz")
    var deviceWidth = "300"
    text = "<html><head><meta name = \"viewport\" content = \"user-scalable=no, width=" + deviceWidth + " , maximum-scale=1.0\"><style>img{max-width:100%%;height:auto !important;width:auto !important;};</style></head><body>" + text + "</body></html>"

    return text
}

1 个答案:

答案 0 :(得分:0)

我用javascript方法。这是我的代码:

  func webViewDidFinishLoad(webView: UIWebView) {





    var frame:CGRect = myWebView.frame



    // javascript
    var height:NSString! = webView.stringByEvaluatingJavaScriptFromString("document.height;")

    var heightInFloat = height.floatValue // convert to float

    var heightINCGFloat = CGFloat(heightInFloat) convert to cgfloat

    frame.size.height = heightINCGFloat //set heigh

    myWebView.frame = frame // set frame

    myWebView.scrollView.contentSize.height = myWebView.frame.height

    var contentsizeHeight = webView.scrollView.contentSize.height

    var yCoordinateOfWebView = myWebView.frame.origin.y

    myScrollView.contentSize = CGSizeMake(self.view.frame.width, yCoordinateOfWebView + contentsizeHeight + labelAuthorOfArticle.frame.height) //

    UIView.animateWithDuration(0.5, animations: {
        self.heightConstraints.constant = heightINCGFloat

        self.myWebView.layoutIfNeeded()

        self.myScrollContentView.layoutIfNeeded()

    })

    self.activityIndicator.stopAnimating()


}