我正在创建基于表视图的应用程序,当用户点击任何表行时,我已经设置了一个UIWebView,用于显示具有不同html内容的Expandable UITableView。它的工作正常,但我的问题是如何根据html内容设置单元格高度,StackOverFlow中有很多类似的问题但是我的情况有些不同。我知道如何使用UIWebView委托方法计算内容高度,但我怎么能在这里申请?
这是我的代码:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [self.arrayHtmlDescription count];
}
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UIWebView *webView;
static NSString* cellIdentifier = @"cell";
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:nil];
webView = [[UIWebView alloc] init];
webView.frame = CGRectMake(0, 0, cell.bounds.size.width, 500);
}
webView.userInteractionEnabled = NO;
[webView sizeToFit];
webView.delegate = self;
webView.backgroundColor = [UIColor clearColor];
webView.opaque = NO;
[webView loadHTMLString: [[self.arrayHtmlDescription objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] baseURL: nil];
[cell.contentView addSubview:webView];
return cell;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 500; // need to set this height dynamically
}
计算UIWebView高度的代码:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
webView.scrollView.scrollEnabled = NO;
CGRect frame = webView.frame;
frame.size.height = 1;
webView.frame = frame;
CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
webView.frame = frame;
NSLog(@"webview height is : %f", fittingSize.height);
}
请建议我如何将fittingSize传递给heightForRowAtIndexPath表视图方法。谢谢!
答案 0 :(得分:0)
为表中的每个单元格保留NSMutableArray的高度,并在委托方法中使用该值:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return [self.height array objectAtIndex:indexPath.row];
}
计算webview的高度时,更新此数组并调用reloadRowsAtIndexPaths方法或重新加载整个tableview。
- (void)webViewDidFinishLoad:(UIWebView *)webView {
// Caluclate the height and update the array of heights.
[self.tableview reloadData];
}
编辑: 要计算NSIndexPath,您可以使用UIWebView的tag属性,如下所示:
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Your code to create webview
webview.tag = indexPath.row;
[cell.contentView addSubview:webView];
return cell;
}
现在,在计算高度后,您可以使用以下方法创建索引路径:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
// Caluclate the height and update the array of heights.
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:webView.tag inSection:0];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]] withRowAnimation:UITableViewRowAnimationFade];
}