Там нет другого механизма для определения высоты ячейки, чем heightForRowAtIndexPath. Если вы не должным образом учитываете расширенную ячейку в этом методе, вы обнаружите, что ваши другие ячейки либо пробегают по ней, либо скрываются под ней. Из костяного кода, где я забыл установить heightForRowAtIndexPath, я уверен, что ваши другие ячейки будут отображаться над ним.
Поскольку вы говорите о тысячах строк, мы предположим, что пользователь не может переупорядочить ячейки.
Что вы можете сделать, это сохранить путь индекса расширенной ячейки, когда пользователь удаляет данную ячейку. Затем heightForRowAtIndexPath может выглядеть следующим образом:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
if ([indexPath isEqual:lastSelectedIndexPath])
{
return 80;
}
else {
return 44;
}
}
Если вы действительно хотите, множественный выбор, вы можете хранить соответствующие пути индекса в массиве и проверить их, как это:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
CGFloat cellHeight = 44;
for (NSIndexPath *expandedIndexPath in expandedIndexPathsArray)
{
if ([indexPath compare:expandedIndexPath] == NSOrderedSame)
{
cellHeight = 80;
break;
}
}
return cellHeight;
}
Получение анимации посмотрите правильно, возьмем некоторую работу. Я уже некоторое время играю с этой конкретной идеей UI и никогда не мог заставить себя сесть и действительно добиться этого. Одна вещь, которую вы можете сделать, - отобразить фиктивное представление, которое оживляет, когда вы обновляете табличное представление позади него.
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPathswithRowAnimation:(UITableViewRowAnimation)animation
может представлять интерес для этого, как вы могли бы использовать анимацию клеток для имитации движения ниже ячеек для размещения вашего расширения.
Если вы можете отказаться от анимации кадра ячейки, вы можете сделать анимацию непрозрачности расширенных данных после установки новой высоты.
Это тяжело, но если вы сделаете это, я готов поспорить, это будет довольно круто. Удачи.
Спасибо Данило, ты меня начал по правильному пути. Я закончил работу с использованием reloadRowsAtIndexPaths в файле didSelectRowAtIndexPath. Я проверяю, расширяется ли ячейка и задает соответствующую высоту в heightForRowAtIndexPath, как и вы упомянули. Еще раз спасибо! – Justin
Слишком круто! Рад дать вам полезный толчок. Надеюсь, это сработает. Может быть, я, наконец, попробую себя на днях. –
'[indexPath compare: expandIndexPath] == NSOrderedSame' должно быть записано как' [indexPath isEqual: expandIndexPath] ' – user102008