我需要在表格视图的单元格中加载HTML。我正在使用UIWebView而不是UILabel,以便解释html标签。 WebView的大小不同,所以我正在做
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[webView sizeToFit];
}
这样就可以正确设置webview的大小。但是,我还需要定义单元格的高度,我打算在其中设置
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
}
不幸的是在webViewDidFinishLoad之前调用了heightForRowAtIndexPath,所以我无法正确定义单元格的高度。
对我的问题有任何建议吗?我发现了一个关于此问题的老问题,但它对我没有帮助:How to determine UIWebView height based on content, within a variable height UITableView?
谢谢,
阿德里安娜
答案 0 :(得分:3)
我找到了解决问题的方法。我在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];
}
它有效且速度很快!
答案 1 :(得分:0)
当你的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;
}
}
答案 2 :(得分:0)
您应该在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
属性。