UITableView - 有时在7.1上扩展单元格时滚动,而不是在7.0上滚动

时间:2014-04-05 09:07:18

标签: uitableview ios7.1

此行为仅适用于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顶部或底部的单元格,我感到恼火的是效果不同。此外,这种效果只是在向下滚动后的第一次。重复时,细胞按预期保持在其位置。只有在再次向上和向下滚动之后,它才会在第一次出现错误。

1 个答案:

答案 0 :(得分:2)

我解决了这个问题;这是由于estimatedHeightForRowAtIndexPath,我删除了方法,现在扩展/折叠按预期工作。