此行为仅适用于iOS 7.1,在7.0上,它按预期工作。
我有一个UITableView,其中包含不同高度的单元格。当点击其中一个时,它会通过
扩展- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row != self.selectedCellIndexPath.row) {
// Close previously opened cell
if (self.selectedCellIndexPath != nil) {
[tableView beginUpdates];
[(MyTableViewCell *) [tableView cellForRowAtIndexPath:self.selectedCellIndexPath] collapse];
[tableView endUpdates];
}
self.selectedCellIndexPath = indexPath;
[tableView beginUpdates];
[(MyTableViewCell *) [tableView cellForRowAtIndexPath:indexPath] expand];
[tableView endUpdates];
}
else if (indexPath.row == self.selectedCellIndexPath.row) {
self.selectedCellIndexPath = nil;
[tableView beginUpdates];
[(MyTableViewCell *) [tableView cellForRowAtIndexPath:indexPath] collapse];
[tableView endUpdates];
}
}
当点击tableView顶部的一行时,一切都按预期运行 - 单元格向下展开,单元格的顶部保持原样。但是当向下滚动并轻敲桌面视图底部的单元格时,单元格会向下移动并展开。细胞越往下越差。
我以这种方式计算表格单元格高度:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
self.prototypeCell = [[MyTableCell alloc] initReuseIdentifier:CellIdentifier];
[self configureCell:self.prototypeCell forIndexPath:indexPath];
float height = 38;
if ([indexPath isEqual:self.selectedCellIndexPath]) {
height += [self.prototypeCell expandedHeight] + 5;
}
return height;
}
如果我点击tableView顶部或底部的单元格,我感到恼火的是效果不同。此外,这种效果只是在向下滚动后的第一次。重复时,细胞按预期保持在其位置。只有在再次向上和向下滚动之后,它才会在第一次出现错误。
答案 0 :(得分:2)
我解决了这个问题;这是由于estimatedHeightForRowAtIndexPath
,我删除了方法,现在扩展/折叠按预期工作。