我正在将一个任意长度的HTML字符串加载到UIWebView
中,然后显示在UITableViewCell
中。我不希望此UIWebView
独立于UITableView
滚动,因此我必须调整其高度以适应内容。
此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;
返回一个正确的值并允许表格正确查看和滚动?
以下是一些示例代码:
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)];
}
非常简单。 39是我在webview的单元格中的一些标题内容的高度。
我正在从笔尖加载单元格的“展开视图”,所以要获取我正在调用viewForTag的webview:
sourcesWebViewHeight
cellForRowAtIndexPath
是由UIWebView
中的上述代码更新的iVar。如果用户点击三次单元格,展开 - 展开 - 展开,并进行一点滚动,最终得到正确的高度。
我尝试使用仅限内存的{{1}}对象“预加载”高度,但由于某种原因从未返回正确的数字。
答案 0 :(得分:5)
问题是我在Web视图有机会渲染之前尝试获取滚动大小。
在实现了didFinishLoad委托方法之后,我原来的javascript工作正常以获得高度。
答案 1 :(得分:2)
对于iOS Safari,您需要使用以下行:
NSInteger height = [[sourcesWebView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight;"] integerValue];
document.documentElement.scrollHeight
无法使用此浏览器。
为确保一切正常,您需要在网络视图加载完毕后调用此方法=)
更新:另一个选项,仅适用于iOS5,他们已将scrollView
属性添加到UIWebView,您可以在其中获取contentSize
。
答案 2 :(得分:1)
由于webViewDelegate
可以在加载HTML代码时获得webView的高度,
tableview:heightForRowAtIndexPath:
方法将进入无限循环
尝试检索位于tableView Cell中的webView:
- (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;
}
以上是当我将HTML代码插入到tableView单元格中的webView中时,我尝试更改tableView单元格的代码,但它会导致无限循环....
我仍然试图找出其他方法。
P.S。当webView位于ScrollView中时,WebViewDelegate
方式正常,但我不知道如何让它在TableView单元格中工作。
答案 3 :(得分:0)
同样的问题可以找到更多更好的答案here。只是觉得它可能对某人有帮助。