将UIWebView转换为具有动态大小的UITableViewCell

use*_*595 4 iphone objective-c uiwebview uitableview ios

我把UIWebView对象变成了倍数UITableViewCell.每个webView都有不同的大小.最初,所有细胞都是相同的高度.用户触摸单元格后,会展开以显示所有webView内容.

我正在使用- (void) webViewDidFinishLoad:(UIWebView *)aWebView动态获取webView高度,并- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath调整单元格的大小.但是,webViewDidFinishLoad仅在调整大小方法后调用,因此,使用旧值为webView高度进行调整大小.

我试图以所需的顺序手动调用这两种方法,但它确实有效(我认为我根本不应该这样做,无论如何......).

这是我将Web视图加载到每个单元格的代码:

    [self.webView setUserInteractionEnabled:NO];
    [self.webView loadHTMLString:finalString baseURL:nil];
    [cell addSubview:self.webView];

    cell.accessoryView = accessoryLabel;
    cell.textLabel.text = nil;

    self.selectedRowIndex = indexPath.row;

    [tableView beginUpdates];
    [tableView endUpdates];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
Run Code Online (Sandbox Code Playgroud)

要动态获取单元格大小:

- (void) webViewDidFinishLoad:(UIWebView *)aWebView {

CGRect frame = aWebView.frame;
frame.size.height = 1;
aWebView.frame = frame;
CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
aWebView.frame = frame;

self.cellSize = fittingSize.height;

NSLog(@"Calling webViewDidFinishLoad. Cell size value: %lf", self.cellSize);

}
Run Code Online (Sandbox Code Playgroud)

要更改单元格大小:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:    (NSIndexPath *)indexPath {

if(indexPath.row == self.selectedRowIndex) {
  NSLog(@"Resizing cell with size: %lf", self.cellSize);
    return self.cellSize + 10;
}

return 44;
}
Run Code Online (Sandbox Code Playgroud)

以下是输出的外观:

2015-02-24 22:59:08.902 testProject[62200:2703641] Resizing cell with size: 0.000000
2015-02-24 22:59:09.064 testProject[62200:2703641] Calling webViewDidFinishLoad. Cell size value: 501.000000
Run Code Online (Sandbox Code Playgroud)

有没有办法只webViewDidFinishLoad在执行后调整单元格大小?

我非常感谢任何帮助!!

use*_*595 5

我仍然不知道为什么会这样,但我使用以下方法解决了它:

我移动[tableView beginUpdates][tableView endUpdates]指示webViewDidFinishLoad方法.这样,无论何时webViewDidFinishLoad执行,它都会正确更新单元格大小.虽然我不认为这是最好的解决方案,但它确实有效.

现在,我的webViewDidFinishLoad方法看起来像这样:

- (void) webViewDidFinishLoad:(UIWebView *)aWebView {

CGRect frame = aWebView.frame;
frame.size.height = 1;
aWebView.frame = frame;
CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
aWebView.frame = frame;

self.cellSize = fittingSize.height;

[self.tableView beginUpdates];
[self.tableView endUpdates];

NSLog(@"Calling webViewDidFinishLoad. Cell size value: %lf", self.cellSize);

}
Run Code Online (Sandbox Code Playgroud)

也许答案可以帮助其他有类似问题的人.

  • 我有无限循环.你有这样的问题吗? (3认同)
  • 你是如何初始化cellSize的? (3认同)