【发布时间】:2012-01-08 14:47:45
【问题描述】:
我正在将任意长度的 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;
}
很简单。 39 是我在带有 web 视图的单元格中的一些标题内容的高度。
我正在从 nib 加载单元格的“扩展视图”,因此要获取 web 视图,我调用 viewForTag:
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 中的上述代码更新的iVar。如果用户点击单元格三次,展开-折叠-展开,并进行一点滚动,最终它会获得正确的高度。
我尝试使用仅限内存的UIWebView 对象“预加载”高度,但由于某种原因从未返回正确的数字。
【问题讨论】:
-
Apple(在 UIWebView 文档中)严格说不要在 UITableView 中使用 UIWebView。
-
我们已经发布了几个应用程序,将网络视图作为单元格,没有任何问题
-
同样问题的更多更好的答案也可以在 [这里][1] 中找到。 [1]:stackoverflow.com/questions/3936041/…
标签: iphone objective-c