此问题在Removing HTML url tags in iOS后跟进。我决定采用Web View方法,因为这似乎是获取正确链接的最简单方法(也就是实际标题的链接,而不仅仅是网址)。但我仍然坚持如何计算网页视图的高度。我使用带有Web视图的表视图单元作为子视图。
我当前的失败方法:
表格视图询问单元格的高度
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return [CommentTableViewCell heightForCellWithComment:(self.comments)[indexPath.row]];
}
这适用于文本视图,因为我可以使用boundingRectWithSize:options:attributes:context:
来计算文本高度,在顶部和底部添加一些填充,然后返回高度。有了网络视图,我无法做到这一点。我目前从Web返回的数据,其中仍然包含一些html标签,插入一些html来更改字体等,然后在Web视图中呈现它。如果我使用类似boundingRectWithSize:options:attributes:context
的方法:返回的高度显然是偏离的。
这可能会尝试计算高度,但这不起作用并返回0. body
上的commment
属性包含html数据。
+ (CGFloat)heightForCellWithComment:(Comment *)comment
{
CommentTableViewCell *cell = [[CommentTableViewCell alloc] init];
[cell.textWebView loadHTMLString:comment.body baseURL:nil];
cell.textWebView sizeThatFits:
CGSizeMake(cell.textWebView.frame.size.width, CGFLOAT_MAX)];
return cell.textWebView.frame.size.height + 48.0f; // 48 px padding
}
UITableViewDataSource请求单元格。我从故事板中取出一个单元格,并在其上设置comment
属性。
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CommentTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:...];
Comment *comment = ...;
cell.comment = comment;
return cell;
}
所以我想说的是在所有桌面视图开始之前计算网页视图尺寸的方法。提前谢谢。
答案 0 :(得分:2)
加载HTML字符串是异步完成的。您必须为UIWebView
设置委托并等待webViewDidFinishLoad:
来电。在此调用中,您可以通过访问webView.scrollView.contentSize.height
来查询Web视图的高度。然后你可以存储高度并告诉表视图重新加载特定的单元格,然后它将具有正确的高度。
答案 1 :(得分:1)
cell.textWebView
方法中heightForCellWithComment:
为零吗?如果您正在为单元格使用故事板,则需要从表视图中将单元格出列以实现此目的,以便实际加载其视图。 (只是调用alloc / init不会从故事板创建子视图,如webview。)
如果您不想从表视图中将其出列,则可以将视图内容移动到可以直接加载的单独nib中。 (出于性能原因,您可能应该加载/出列一次,并在每次调用heightForCellWithContent:
时重复使用它。)
答案 2 :(得分:0)
请注意,webViewDidFinishLoad:
不是webView完成加载的实时时间。您最好使用:
- (void)webViewDidFinishLoad:(UIWebView *)webView{
// the real time of webView finish loading
if ([webView isFinishLoading] == YES) {
// do something you want
}
}