Ich beschloss mit reloadRowsAtIndexPaths
.
Ich speichere in didSelectRowAtIndexPath
den indexPath der ausgewählten Zelle und rufen reloadRowsAtIndexPaths
am Ende (Sie können NSMutableArray für die Liste der Elemente senden, die Sie neu laden möchten).
En heightForRowAtIndexPath
können Sie prüfen, ob indexPath in der Liste der expandIndexPath-Zellen enthalten ist oder nicht, und die Höhe senden.
Sie können dieses einfache Beispiel überprüfen: https://github.com/ferminhg/iOS-Examples/tree/master/iOS-UITableView-Cell-Height-Change/celdascambiadetam Es ist eine einfache Lösung.
Ich füge eine Art Code hinzu, wenn es Ihnen hilft
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 20;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath*)indexPath
{
if ([indexPath isEqual:_expandIndexPath])
return 80;
return 40;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Celda";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
[cell.textLabel setText:@"wopwop"];
return cell;
}
#pragma mark -
#pragma mark Tableview Delegate Methods
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSMutableArray *modifiedRows = [NSMutableArray array];
// Deselect cell
[tableView deselectRowAtIndexPath:indexPath animated:TRUE];
_expandIndexPath = indexPath;
[modifiedRows addObject:indexPath];
// This will animate updating the row sizes
[tableView reloadRowsAtIndexPaths:modifiedRows withRowAnimation:UITableViewRowAnimationAutomatic];
}