Просто примечание об популярном и полезном ответе Артура Голдсмита выше: если вы перемещаете мышь из одного элемента в другой в IE (по крайней мере до IE 9), у вас могут возникнуть проблемы с тем, чтобы это правильно работало, если новый элемент имеет прозрачный фон (который он по умолчанию). Моим обходным путем явился новый элемент прозрачного фонового изображения.
Получите indexpath выбранной строки. Перезагрузите таблицу. В heightForRowAtIndexPath методе UITableViewDelegate, набор высота строки, выбранной к различной высоте и для других, возвращают нормальную высоту строки
reloadData бесполезен, потому что нет анимации ...
Это то, что я сейчас пытаюсь:
NSArray* paths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]];
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationFade];
[self.tableView deleteRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
Почти работает правильно. Почти. Я увеличиваю высоту ячейки, и иногда при замене ячейки в табличном представлении возникает небольшая «икота», как если бы какая-то позиция прокрутки в табличном представлении сохранялась, новая ячейка (которая является первой ячейкой в таблице) имеет слишком большое смещение, и прокрутка отскакивает, чтобы изменить его положение.
Я решил эту проблему с помощью небольшого хака:
static int s_CellHeight = 30;
static int s_CellHeightEditing = 60;
- (void)onTimer {
cellHeight++;
[tableView reloadData];
if (cellHeight < s_CellHeightEditing)
heightAnimationTimer = [[NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(onTimer) userInfo:nil repeats:NO] retain];
}
- (CGFloat)tableView:(UITableView *)_tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (isInEdit) {
return cellHeight;
}
cellHeight = s_CellHeight;
return s_CellHeight;
}
Когда мне нужно увеличить высоту ячейки, я устанавливаю isInEdit = YES
и вызываю метод [ self onTimer]
и анимирует рост клетки, пока не достигнет значения s_CellHeightEditing: -)
я нашел ДЕЙСТВИТЕЛЬНО простое решение этого как побочный эффект к UITableView
, я продолжал работать.....
Хранилище ширина ячеек в переменной, которая обычно сообщает об исходной высоте через tableView: heightForRowAtIndexPath:
, затем когда вы хотите анимировать изменение высоты, просто изменяют значение переменной и называют это...
[tableView beginUpdates];
[tableView endUpdates];
Вы найдете, что это не делает полной перезагрузки, но достаточно для UITableView
, чтобы знать, что это должно перерисовать клетки, захватив новое значение высоты для клетки.... и предположить что? Это АНИМИРУЕТ изменение для вас. Сладкий.
у меня есть более подробное объяснение и полные примеры кода на моем блоге... Анимационное Изменение Ширины ячеек UITableView