2011-11-29 106 views
10

我加载任意长度的HTML字符串转换为UIWebView,然后将其在一个UITableViewCell显示。我不希望这个UIWebView独立滚动UITableView,所以我必须调整其高度以适应内容。调整大小的UIWebView高度以配合内容

UITableViewCell也是可折叠的,当它处于折叠状态时不会显示UIWebView

问题的症结,我怎么知道这个高度是什么,这样我可以有heightForRowAtIndexPath返回一个适当的值,并允许该表的外观和正确地滚动?

下面是一些示例代码:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
if (indexPath.row == 0) 
    return 286; 

if (indexPath.row == 1) { 
    if (analysisExpanded) 
     return analysisWebViewHeight + 39; 
    else 
     return 52; 
} 

if (sourcesExpanded) 
    return sourcesWebViewHeight + 39; 

return 53; 

}

很简单。 39是webview中单元格的一些标题内容的高度。

我加载从笔尖细胞的“扩展视图”,所以让我打电话viewForTag web视图:

 UIWebView* sourcesWebView = (UIWebView*)[cell viewWithTag:1]; 
     [sourcesWebView setBackgroundColor:[UIColor clearColor]]; 
     [sourcesWebView loadHTMLString:placeholder baseURL:[NSURL URLWithString:@"http://example.com/"]]; 
     sourcesWebViewHeight = [[sourcesWebView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight"] floatValue]; 
     [sourcesWebView setFrame:CGRectMake(sourcesWebView.frame.origin.x, sourcesWebView.frame.origin.y, sourcesWebView.frame.size.width, sourcesWebViewHeight)]; 

sourcesWebViewHeight是由上面的代码中cellForRowAtIndexPath更新伊娃。如果用户点击三次,则展开 - 折叠 - 展开,然后进行一些滚动,最终获得正确的高度。

我尝试“预加载”,高度使用内存只有UIWebView对象,但从来没有出于某种原因返回正确的数字。

+0

Apple(在UIWebView文档中)严格地说不要在UITableView中使用UIWebView。 – makboney

+0

我们已经发布了几个应用程序和网络视图作为单元没有任何问题 – Denis

+0

同样的问题的更多和更好的答案也可以在这里找到[1]。 [1]:http://stackoverflow.com/questions/3936041/how-to-determine-the-content-size-of-a-uiwebview –

回答

2

对于iOS Safari浏览器,你需要使用下面的行:

NSInteger height = [[sourcesWebView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] integerValue]; 

document.documentElement.scrollHeight没有为这个浏览器的工作。

只是为了确保一切是正确的,你需要你的Web视图后打电话到该加载完毕=)

更新:另一种选择,只会工作,对iOS5的,他们已经加入scrollView属性UIWebView,在那里你可以得到contentSize

5

问题是我试图在Web视图有机会呈现它之前获取滚动大小。

执行didFinishLoad委托方法后,我的原始JavaScript工作得很好,以获得高度。

+1

你应该接受这个的答案,工作了我 – Fonix

1

由于webViewDelegate可以得到webView的高度时加载HTML代码, 的tableview:heightForRowAtIndexPath:方法将进入一个无限循环的 试图检索地处的tableView细胞web视图:

- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    float height; 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    UIWebView *webContent = (UIWebView *) [cell viewWithTag:tagTableSingleContentWeb]; 
    CGRect frame = webContent.frame; 

    height = frame.origin.y + frame.size.height + 30; 

    return height; 
} 

以上是我试过代码改变的tableView细胞当我插入HTML代码到的tableView细胞内的web视图,但它会导致无限循环....

我仍然在试图找出一些其他的方式。

p.s.WebViewDelegate当webView位于ScrollView中时,方式是可以的,但我不知道如何使它在TableView单元格内工作。

+0

你有没有找到解决方案?我有同样的问题? –

0

对于几乎相同的问题,更多和更好的答案可以找到here以及。只是认为这可能对某人有帮助。

相关问题