UITableView在开始/结束更新后自动滚动到顶部调用调整高度

时间:2014-07-24 17:39:11

标签: ios xcode uitableview ios7

我有一个初始化我的单元格的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会自动滚动到第一行或第二个元素。

有什么建议吗?

此致

2 个答案:

答案 0 :(得分:4)

我觉得heightForRowAtIndexPath:方法是问题的一部分。不要执行计算,而是尝试在该方法中使用两个常量:一个用于展开,一个用于折叠。我想知道该方法执行时间是否太长,然后认为行的高度为0,然后计算最终返回,但UITableView滚动位置未更新。

另一个建议可能是您的estimatedHeightheightFor方法返回了两个截然不同的值。

答案 1 :(得分:0)

检查您的代码中是否使用了ScrollTORowAtIndexPAth someWhere