根据该行中的单元格设置UITableView的行高

时间:2013-11-07 12:45:29

标签: ios objective-c

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

最初,我尝试使用

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

然而,问题是,当表加载时,调用流似乎是:

第一个电话:

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

然后致电:

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

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

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

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分: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:

答案 1 :(得分: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