我正在将任意长度的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是我在带有webview的单元格中放置一些标题内容的高度。
我正在从nib加载单元格的“扩展视图”,所以为了获取webview,我调用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
是一个iVar,在cellForRowAtIndexPath
中被上述代码更新。如果用户点击单元格三次,展开-折叠-展开,并稍微滚动,最终会得到正确的高度。
我尝试使用一个仅存储在内存中的UIWebView
对象来“预加载”高度,但由于某种原因它从未返回正确的数字。