最近要实现下面的效果,就是在UITableView中有很多行数据,当用户选择某一行之后,将该行高度调整为原来2倍,其它行高度不变,改行后面的行往后顺移.
这个问题困扰了很久,想过调整UITableViewCell的frame,或则调整height,或则调整origin.y,在之间插入新视图,但发现如果选择最后几行中某一行,倒数一两行不能被选中,后来又给UITableView添加手势,但由于UITableView的重用机制,滚动后会重新调整尺寸,后来的效果不尽理想.
好事多磨,想来想去,终于找到了解决方案,就是增加一个数组,
BOOL bCheck[20]; (也可以是NSArray,里面添加NSNumber成员,记录cell高度,这里简单用bool数组)
记录每个cell的高度,
然后在:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (bCheck[indexPath.row]) {
return 100;
}else{
return 50;
}
}
最后处理选择操作:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
bCheck[indexPath.row] = YES;
[tableView reloadData];
}