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



目前我在自定义的 uitableview 单元格中加载了网络视图。 问题是 Web 视图的大小可变。 在webViewDidFinishLoad中,我能够根据html文档的实际大小设置Web视图的大小。 我的问题是表格单元格在网页视图完成加载之前已经将其高度设置为高度为行索引路径。 加载表格单元格后如何更改其高度?

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

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

这是我上次尝试使用部分Gavin代码的方法。 但是,当然,既然我已经出来了,就无法设置表单元格,因为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中,将数组中的高度替换为该单元格实际需要的高度(我相信您发布的代码中的NSString *h),并在表视图上调用reloadDatareloadData将点击heightForRowAtIndexPath:,这将查看高度数组,该数组现在具有该单元格所需的实际高度,因此所有内容都应该闪亮。

你应该能够对你的 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;
}

这样,如果表格单元格可见,它将根据嵌入的 Web 视图的高度设置高度,否则将使用默认高度。为了使表视图刷新单元格的高度,您必须在正确调整 Web 视图大小后调用以下内容:

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

这不会让它重新加载单元格,这可能会让你搞砸事情,它只会让它再次检查高度,单元格高度将动画化到新的高度。

最新更新