我需要在表格视图的单元格中加载HTML。我使用UIWebView而不是UILabel来解释html标记。WebView的大小不同,所以我这样做
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[webView sizeToFit];
}以便正确设置webview的大小。但是,我还需要定义单元格的高度,这是我计划在内部设置的
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
}不幸的是,heightForRowAtIndexPath是在webViewDidFinishLoad之前调用的,所以我不能正确定义单元格的高度。
对我的问题有什么建议吗?我发现了一个关于这方面的老问题,但它对我没有帮助:How to determine UIWebView height based on content, within a variable height UITableView?
谢谢,
阿德里亚纳
发布于 2011-05-11 19:49:19
我找到了解决我的问题的办法。我需要在tableview的末尾有一个webview,所以我完成了以下操作:
- (void)viewWillAppear:(BOOL)animated {
CGRect frame = CGRectMake(10, 0, 280, 400);
webView = [[UIWebView alloc] initWithFrame:frame];
self.webView.delegate = self;
webView.hidden = YES;
//It removes the extra lines from the tableview.
[self.tableView setTableFooterView:self.webView];
...
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[webView sizeToFit];
[webView setBounds:CGRectMake(webView.bounds.origin.x, webView.bounds.origin.y, webView.bounds.size.width+20, webView.bounds.size.height)];
self.webView.hidden = NO;
[self.tableView setTableFooterView:webView];
...
[webView release];
}它很有效,而且速度很快!
发布于 2011-05-10 20:26:05
当你的webview已经完成加载时,告诉你的tableview重新加载它的数据-这将再次询问单元格的高度:)
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[webView sizeToFit];
[tableView reloadData];
}第一次加载表视图时,使用web视图的默认高度并显示正在加载/请稍候消息?
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (webViewIsLoaded) {
return [webView bounds[.size.height;
} else {
return 50;
}
}发布于 2011-05-10 20:38:42
您应该在web视图完成加载时保存行高,然后刷新表格:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[webView sizeToFit];
self.rowHeight = webView.bounds.size.height;
[tableView reloadData];
}并以这种方式更新tableView:heightForRowAtIndexPath:方法:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return self.rowHeight ? self.rowHeight : 50;
}不过,您应该为类定义一个CGFloat rowHeight属性。
https://stackoverflow.com/questions/5949796
复制相似问题