7

我想根据该行中的单元格调整 UITableView 的行高。

最初,我尝试使用

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

但是,问题是,在加载表时,调用流程似乎是:

第一次调用:

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

然后调用:

(UIViewTableCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

这意味着,在生成单元格之前,我必须告诉表格其行的高度。

然而,我想要的恰恰相反,即在我的单元格生成后,我告诉表格这些行的高度。

有什么方法可以做到这一点吗?

4

2 回答 2

5

根据来自tableView: cellForRowAtIndexPath:和中的数据为每一行创建一个高度数组,tableView heightForRowAtIndexPath:只需从该数组中获取高度值。

在你的实现文件中声明:

NSMutableArray *heights;

viewDidLoad:初始化它:

heights = [NSMutableArray array];

tableView: cellForRowAtIndexPath:设置每行的高度:

[heights addObject:[NSNumber numberWithFloat:HEIGHT]];

并在tableView heightForRowAtIndexPath:返回所需的高度:

return [heights objectAtIndex:indexPath.row];

这应该有效,因为每个单元格都被调用tableView: cellForRowAtIndexPath:,然后每个单元格tableView heightForRowAtIndexPath:都被调用。

于 2013-11-07T13:03:50.590 回答
1

可能是唯一的解决方案是将变量放入 .h 文件中,例如

@property (nonatomic) int height

将其初始化为 viewDidLoad 之类的

self.height = 40;

然后将此变量返回到

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

 return self.height;
}

然后在你tableView: cellForRowAtIndexPath:更新这个变量就像你的新高度然后重新加载[self.yourTable reloadData]你的viewDidAppear

于 2013-11-07T12:56:53.223 回答