Можете ли вы анимировать изменение высоты на UITableViewCell при выборе?

Просто примечание об популярном и полезном ответе Артура Голдсмита выше: если вы перемещаете мышь из одного элемента в другой в IE (по крайней мере до IE 9), у вас могут возникнуть проблемы с тем, чтобы это правильно работало, если новый элемент имеет прозрачный фон (который он по умолчанию). Моим обходным путем явился новый элемент прозрачного фонового изображения.

389
задан Mark Amery 12 May 2014 в 22:25
поделиться

4 ответа

Получите indexpath выбранной строки. Перезагрузите таблицу. В heightForRowAtIndexPath методе UITableViewDelegate, набор высота строки, выбранной к различной высоте и для других, возвращают нормальную высоту строки

-2
ответ дан lostInTransit 12 May 2014 в 22:25
поделиться

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

Почти работает правильно. Почти. Я увеличиваю высоту ячейки, и иногда при замене ячейки в табличном представлении возникает небольшая «икота», как если бы какая-то позиция прокрутки в табличном представлении сохранялась, новая ячейка (которая является первой ячейкой в таблице) имеет слишком большое смещение, и прокрутка отскакивает, чтобы изменить его положение.

14
ответ дан 22 November 2019 в 23:47
поделиться

Я решил эту проблему с помощью небольшого хака:

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: -)

-1
ответ дан 22 November 2019 в 23:47
поделиться

я нашел ДЕЙСТВИТЕЛЬНО простое решение этого как побочный эффект к UITableView, я продолжал работать.....

Хранилище ширина ячеек в переменной, которая обычно сообщает об исходной высоте через tableView: heightForRowAtIndexPath: , затем когда вы хотите анимировать изменение высоты, просто изменяют значение переменной и называют это...

[tableView beginUpdates];
[tableView endUpdates];

Вы найдете, что это не делает полной перезагрузки, но достаточно для UITableView, чтобы знать, что это должно перерисовать клетки, захватив новое значение высоты для клетки.... и предположить что? Это АНИМИРУЕТ изменение для вас. Сладкий.

у меня есть более подробное объяснение и полные примеры кода на моем блоге... Анимационное Изменение Ширины ячеек UITableView

876
ответ дан 22 November 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: