2016-01-24 131 views
0

我实际上正在开发一个iOS应用程序,它必须显示从服务器下载的HTML代码。自动调整UIWebView以适应内容

我的视图是由一个分组的TableView组成,每个部分有一个单元格,单元格由UIWebView组成,它必须显示HTML代码。

我不想让UIWebView向上/向下滚动,我只想允许右/左滚动,我希望它被设置为其内容的高度。

我读了很多关于这个问题的主题,但是任何解决方案对我来说都是完全可用的。

根据我奇怪的是,对于某些细胞的我得到正确的高度,它的设置正确,但不从每个细胞......

这是我试过的代码(有几个测试还是书面):

func webViewDidFinishLoad(webView: UIWebView) { 
    webView.scrollView.scrollEnabled = false 

    let size = self.sizeThatFits(CGSizeMake(self.frame.width, CGFloat(FLT_MAX))) 
    self.frame = CGRectMake(0, 0, self.frame.width, size.height); 

    let test1 = webView.stringByEvaluatingJavaScriptFromString("document.body.offsetHeight;") 
    let test2 = webView.stringByEvaluatingJavaScriptFromString("document.body.scrollHeight;") 
    let test3 = webView.stringByEvaluatingJavaScriptFromString("document.documentElement.scrollHeight;") 

    let height = CGFloat(Double(test2!)!) 

    if(self.containingVC is InfoDrugViewController){ 
     let VC = self.containingVC as! InfoDrugViewController 
     VC.heightReady(height, index: self.index.section) 
    }else{ if (self.containingVC is InfoProtocolViewController){ 
     let VC = self.containingVC as! InfoProtocolViewController 
     VC.heightReady(height, index: self.index.section) 
     } 
    } 

} 

如果有人知道如何设法总是找到合适的高度,那就完美了!

(请注意,HTML代码是从服务器下载,并通过所见即所得的产生从网站(CKEditor的)文本框。)

回答

0

它找到一个有效的解决方案,也许是没有干净的一个了,但至少它的工作原理:

func webViewDidFinishLoad(webView: UIWebView) { 
    webView.scrollView.scrollEnabled = false 
    var frame = self.frame 
    frame.size.width = self.containingVC.view.frame.size.width 
    frame.size.height = 1 
    self.frame = frame 
    frame.size.height = self.scrollView.contentSize.height 
    self.frame = frame 

    let test0 = self.scrollView.contentSize.height 

    let size = self.sizeThatFits(CGSizeMake(self.frame.width, CGFloat(FLT_MAX))) 
    self.frame = CGRectMake(0, 0, self.frame.width, size.height); 

    let test1 = CGFloat(Double(webView.stringByEvaluatingJavaScriptFromString("document.body.offsetHeight;")!)!) 
    let test2 = CGFloat(Double(webView.stringByEvaluatingJavaScriptFromString("document.body.scrollHeight;")!)!) 
    let test3 = CGFloat(Double(webView.stringByEvaluatingJavaScriptFromString("document.body.clientHeight")!)!) 
    let test4 = CGFloat(Double(webView.stringByEvaluatingJavaScriptFromString("document.documentElement.scrollHeight;")!)!) 
    let test5 = CGFloat(Double(webView.stringByEvaluatingJavaScriptFromString("document.documentElement.clientHeight")!)!) 
    let test6 = CGFloat(Double(webView.stringByEvaluatingJavaScriptFromString("document.documentElement.offsetHeight")!)!) 

    print("0: \(test0) | 1: \(test1) | 2: \(test2) | 3: \(test3) | 4: \(test4) | 5: \(test5) | 6: \(test6)") 


    let height = max(test0, test1, test2, test3, test4, test5, test6) 

    if(self.containingVC is InfoDrugViewController){ 
     let VC = self.containingVC as! InfoDrugViewController 
     VC.heightReady(height, index: self.index.section) 
    }else{ if (self.containingVC is InfoProtocolViewController){ 
     let VC = self.containingVC as! InfoProtocolViewController 
     VC.heightReady(height, index: self.index.section) 
     } 
    } 
    self.scrollView.scrollEnabled = true 

}