Анимируйте высоту UITableViewCell на выборе [дубликат]

5
задан Community 23 May 2017 в 12:11
поделиться

1 ответ

Нет другого механизма для указания высоты ячейки, кроме 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;

}

Чтобы анимация выглядела правильно, потребуется некоторая работа. Я некоторое время играл с этой конкретной идеей пользовательского интерфейса и никогда не мог заставить себя сесть и действительно воплотить ее в жизнь. Одна вещь, которую вы могли бы сделать, - отобразить фиктивное представление, которое анимируется, пока вы обновляете табличное представление за ним.

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPathswithRowAnimation:(UITableViewRowAnimation)animation

может представлять интерес для этого, так как вы можете использовать анимацию ячеек для имитации движения ячеек ниже, чтобы приспособить ваше расширение.

Если вы можете вообще отказаться от анимации кадра ячейки, вы можете сделать анимацию непрозрачности расширенных данных после установки новой высоты.

Это непросто, но если вы заставите его работать, я готов поспорить » будет круто. Удачи.

повторное обновление табличного представления за ним.

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPathswithRowAnimation:(UITableViewRowAnimation)animation

может быть интересным для этого, так как вы можете использовать анимацию ячеек для имитации движения ячеек ниже, чтобы приспособиться к вашему расширению.

Если вы можете вообще отказаться от анимации кадра ячейки , вы можете сделать анимацию непрозрачности расширенных данных после установки новой высоты.

Это непросто, но если вы заставите его работать, держу пари, это будет довольно круто. Удачи.

повторное обновление табличного представления за ним.

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPathswithRowAnimation:(UITableViewRowAnimation)animation

может представлять интерес для этого, так как вы могли бы использовать анимацию ячеек для имитации движения ячеек ниже, чтобы приспособиться к вашему расширению.

Если вы можете вообще отказаться от анимации кадра ячейки , вы можете сделать анимацию непрозрачности расширенных данных после установки новой высоты.

Это непросто, но если вы заставите его работать, держу пари, это будет довольно круто. Удачи.

6
ответ дан 14 December 2019 в 13:38
поделиться