Как анимировать изменение высоты заголовка раздела в UITableView?

Я реализовал этот метод для возврата высоты заголовка раздела. Однако, когда высота для изменений раздела, это сразу происходит без анимации.

Существует ли анимация для этого?

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    if (flatHeader) {
        return 50.0f;
    } else {
        return 100.0f;
    }
}
18
задан jszumski 29 April 2013 в 17:29
поделиться

2 ответа

Я не уверен на 100%, что это сработает для заголовка таблицы, но это работает для строк таблицы, так что попробовать стоит. У меня есть переменная экземпляра headerHeight , изначально установленная на 44.0, и я меняю ее так:

- (void)changeHeight {
    [self.tableView beginUpdates];
    headerHeight = 88.0;
    [self.tableView endUpdates];
}

В моем коде я возвращаю headerHeight в heightForRowAtIndexPath , но вы можете попробуйте это в heightForHeaderInSection :

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return headerHeight;
}
24
ответ дан 30 November 2019 в 07:23
поделиться

Я не тестировал это, но иногда получаю нежелательную анимацию, когда мой UITableViewCells меняет высоту. Причина этого в том, что я рисую свои собственные ячейки и использую для этого CALayers. В (void) layoutSubviews ячейки я бы изменил размер моего CALayer на размер кадра для ячейки

myLayer.frame = self.bounds;

Когда свойство frame / bounds CALayer изменяется, оно анимируется. Итак, теоретически я бы сказал, что вы можете использовать метод tableView: viewForHeaderInSection:, который позволит вам нарисовать собственный заголовок раздела. Вы можете просто вернуть UIView, который реализует (void) layoutSubviews , а затем в этом методе do

self.layer.frame = self.bounds;

Просто идея.

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