如何更改已经加载的表格单元格的高度?

目前我有webviews加载在自定义的uitableview单元格。 问题是networking视图有可变的大小。 在webViewDidFinishLoad中,我可以根据html文档的实际大小来设置Web视图的大小。 我的问题是在web视图完成加载之前已经将其高度设置在heightForRowAtIndexPath中的表格单元格。 如何在表格单元格已经被加载之后改变它的高度?

理想情况下,我觉得我应该能够使用这样的代码行。

cellW.frame = cellW.cellWebView.frame; 

不过,我似乎没有访问heightForRowAtIndexPath中的单元格信息。 我觉得我已经很好地解释了情况,但是你认为我应该发布的任何代码都可以放在这里。 我已经尝试了很多东西(所以有评论和失败的尝试在这个无处不在),但主要的问题是我似乎无法访问正确的地方,如heightForRowAtIndexPath的单元格信息。 如果我甚至可以在webViewDidFinishLoad中以某种方式设置单元格信息,我可以简单地设置单元格的框架,我也在设置Web视图的框架大小。

下面是我的表格单元格子类的设置。

 #import <UIKit/UIKit.h> #import "DefinitionsAndConstants.h" @interface UITableViewCellWebView : UITableViewCell { UIWebView *cellWebView; } @property (nonatomic,retain) UIWebView *cellWebView; @end 

这是我最后试图使用部分加文的代码。 但是当然,现在没有办法设置表格单元格了,因为cellForRowAtIndexPath是不可分配的。

 -(void)webViewDidFinishLoad:(UIWebView *)webViews { [webViews stringByEvaluatingJavaScriptFromString:@"twitterfy()"]; [webViews stringByEvaluatingJavaScriptFromString:@"document.getElementById('tweettext').innerHTML=tweet"]; NSString* h = [webViews stringByEvaluatingJavaScriptFromString:@"getDocHeightMax()"]; int height = [h intValue]; webViews.frame = CGRectMake(0.0f, 0.0f, 320.0f, height); NSString* i = [webViews stringByEvaluatingJavaScriptFromString:@"return indexPath"]; int ii = [i intValue]; NSIndexPath* ip = [NSIndexPath indexPathForRow:ii inSection:0]; UITableViewCellWebView *tableCell = (UITableViewCellWebView *)[self.tableView cellForRowAtIndexPath:ip]; if (tableCell) { tableCell.frame = webViews.frame; } NSLog(@"Got height from webview %d", height); } 

我会设置一个可变数组来读取高度。 在viewDidLoad ,你必须分配一些起始值(可能只是一堆@"44.0" ,这并不重要,它将不会被使用)。 在你的heightForRowAtIndexPath: ,只是返回该数组中的数字。 然后在webViewDidFinishLoad ,将数组中的高度replace为您实际需要的单元格的高度(我相信您发布的代码中的NSString *h ),然后在您的表视图上调用reloadDatareloadData将会打到heightForRowAtIndexPath:它将查看高度数组,现在它已经具有该单元格所需的实际高度,所以一切都应该shiny。

你应该可以为你的heightForRowAtIndexPath方法做这样的事情:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { MyTableViewCell *tableCell = (MyTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath]; if (tableCell) { return tableCell.cellWebView.frame.size.height; } return 44; } 

这样,如果表格单元格可见,它将根据embedded式web视图的高度来设置高度,否则将使用默认高度。 为了使表格视图刷新单元格的高度,您必须在Web视图大小合适时调用以下内容:

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

这不会让它重新加载单元格,这可能会把事情搞砸,只会使它再次检查高度,单元格高度将生成新的高度。