Анимация contentInset в UITableView также анимирует кадры подпредставлений строк

У меня есть UITableView с пользовательскими ячейками. Естественно, в cellForRowAtIndexPath я пытаюсь удалить старую ячейку из очереди и использовать ее повторно. Каждая ячейка имеет иерархию представлений с автоматическим изменением размера: я устанавливаю рамку верхнего представления, когда устанавливаю его содержимое в cellForRowAtIndexPath, и его подпредставления соответствующим образом изменяют свои рамки. Обратите внимание, что высота строки также является динамической. Все это прекрасно работает, когда я просто прокручиваю таблицу (со строками разного контента и фреймами). Но у меня также есть текстовое поле в том же представлении, что и эта таблица, поэтому мне нужно прокрутить содержимое таблицы, чтобы компенсировать отображаемую/скрытую клавиатуру. Для этого я анимирую свойство contentInset:

// Called when the UIKeyboardWillHideNotification is sent
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
    NSTimeInterval animationDuration = [[aNotification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
    UIViewAnimationCurve animationCurve = [[aNotification.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];

    [UIView setAnimationCurve:animationCurve];
    [UIView animateWithDuration:animationDuration animations:^{
        messagesTable.contentInset = UIEdgeInsetsMake(0, 0, kHSTableBottomInset, 0);
        messagesTable.scrollIndicatorInsets = UIEdgeInsetsZero;
    }];
}

Это тоже работает хорошо, но есть интересный глюк: когда клавиатура скрыта, а contentInset анимируется обратно в нормальное состояние (kHSTableBottomInset — небольшое значение для сохранения поля), таблица перезагружает ячейки, которые будут прокрутите сверху, чтобы отобразить. Проблема в том, что эта перезагрузка выполняется и внутри блока анимации! В результате, когда я изменяю удаленный из очереди кадр подвида (в частности, ширину) в cellForRowAtIndexPath (который вызывается как часть или перезагрузка), это изменение также анимируется и отображается, когда ячейка прокручивается вниз для просмотра.Можно ли избежать такого поведения?

5
задан Vlas Voloshin 16 March 2012 в 19:18
поделиться