UITableView Scroll automatically up to the start after the start / end of a call update to adjust the height

I have a TableViewController that initializes my cell:

- (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;
}

and responds to 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 is an internal variable of TableViewController

Each custom cell has a button inside that responds to the selector when touched, this is my CustomViewCell code:

  self.expandSocialAction = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        self.expandSocialAction.backgroundColor = [FIDUIHelper fideniaLightBlue];
        [self.expandSocialAction addTarget:self action:@selector(selectRow:) forControlEvents:UIControlEventTouchUpInside];
    [self.contentView addSubview:self.expandSocialAction];

and then:

-(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];

}

The cell has a pointer to the parent tableViewContorller: self.parentTableViewController. Everything works fine, after calling beginUpdate and endUpdates, the heightForRowAtIndexPath method is called (I put the break point), and also the che cell has the correct height.

, , , , 6- , , View .

?

,

+4
2

, heightForRowAtIndexPath: . , , : , . , , , 0, , UITableView .

, estimatedHeight heightFor .

+4

, ScrollTORowAtIndexPAth someWhere

0

All Articles