我有一个初始化我的单元格的TableViewController:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
FIDPostTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Configure the cell for this indexPath
[cell updateFonts];
[cell loadDataWithPost:[self.posts objectAtIndex:indexPath.item]];
cell.parentTableViewController = self;
cell.indexPath = indexPath;
[cell draw];
if(self.selectedIndex == indexPath.row){
//Do expand cell stuff
} else{
//DO closed cell stuff
}
return cell;
}
并且响应heightForRowAtIndexPath:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *reuseIdentifier = CellIdentifier;
FIDPostTableViewCell *cell = [self.offscreenCells objectForKey:reuseIdentifier];
if (!cell) {
cell = [[FIDPostTableViewCell alloc] init];
[self.offscreenCells setObject:cell forKey:reuseIdentifier];
}
// Configure the cell for this indexPath
[cell updateFonts];
[cell loadDataForHeightCalculationWithPost:[self.posts objectAtIndex:indexPath.item]];
[cell draw];
if(self.selectedIndex == indexPath.row){
return [cell calculateHeight] + 100;
} else{
return [cell calculateHeight];
}
}
self.selectedIndex 是TableViewController的int局部变量
每个自定义单元格都有一个按钮,触摸时会响应选择器,这是我的CustomViewCell代码:
self.expandSocialAction = [UIButton buttonWithType:UIButtonTypeRoundedRect];
self.expandSocialAction.backgroundColor = [FIDUIHelper fideniaLightBlue];
[self.expandSocialAction addTarget:self action:@selector(selectRow:) forControlEvents:UIControlEventTouchUpInside];
[self.contentView addSubview:self.expandSocialAction];
然后:
-(void)selectRow:(id)sender{
if(self.parentTableViewController.selectedIndex == self.indexPath.row){
self.parentTableViewController.selectedIndex = -1;
} else{
self.parentTableViewController.selectedIndex = self.indexPath.row;
}
[self.parentTableViewController.tableView beginUpdates];
[self.parentTableViewController.tableView endUpdates];
}
单元格有一个指向父tableViewContorller:self.parentTableViewController的指针。 一切正常,在beginUpdate和endUpdates调用之后,调用了heightForRowAtIndexPath方法(我设置了一个断点),并且che cell也有正确的高度。
如果我单击第一行或第二行上的按钮,单元格动画并更改高度,但是如果我向下滚动表格,例如我点击第6行,高度会发生变化但是tableView会自动滚动到第一行或第二个元素。
有什么建议吗?
此致
答案 0 :(得分:4)
我觉得heightForRowAtIndexPath:
方法是问题的一部分。不要执行计算,而是尝试在该方法中使用两个常量:一个用于展开,一个用于折叠。我想知道该方法执行时间是否太长,然后认为行的高度为0
,然后计算最终返回,但UITableView
滚动位置未更新。
另一个建议可能是您的estimatedHeight
和heightFor
方法返回了两个截然不同的值。
答案 1 :(得分:0)
检查您的代码中是否使用了ScrollTORowAtIndexPAth
someWhere