我想根据该行中的单元格调整UITableView的行高。
最初,我尝试使用
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
然而,问题是,当表加载时,调用流似乎是:
第一个电话:
(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
然后致电:
(UIViewTableCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
这意味着,在生成单元格之前,我必须告诉表格行的高度。
然而,我想要的恰恰相反,即在我的单元格生成之后,我告诉表格这行的高度。
有没有办法实现这个目标?
答案 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