Краткий, прагматичный ответ: изменение UITableViewRowAnimationAutomatic
на UITableViewRowAnimationTop
решает проблему.Нет больше исчезающих строк!(протестировано на iOS 5.1)
Еще один короткий, прагматичный ответ, поскольку, как говорят, UITableViewRowAnimationTop
вызывает свои собственные проблемы: создайте новый вид ячейки вместо изменения кадра существующего.В реальном приложении данные, отображаемые в представлении ячеек, в любом случае должны находиться в части модели приложения, поэтому при правильном проектировании не должно быть проблемой создание другого представления ячеек, которое отображает те же данные только по-другому.(кадр в нашем случае).
Еще несколько мыслей относительно анимации перезагрузки той же самой ячейки:
UITableViewRowAnimationAutomatic
, кажется, разрешает UITableViewRowAnimationFade
в некоторых случаях, когда вы видитеклетки исчезают и исчезают.Предполагается, что новая ячейка исчезнет, а старая исчезнет.Но здесь старая и новая ячейки - это одно и то же. Так что же это может сработать?На уровне основной анимации, возможно ли затемнить изображение и одновременно его отобразить?Звучит сомнительно.В результате вы просто видите исчезновение.Это можно считать ошибкой Apple, поскольку ожидаемое поведение может заключаться в том, что если изменилось то же представление, свойство alpha не будет анимированным (поскольку оно не может одновременно анимировать как 0, так и 1), новместо этого анимируются только рамка, цвет и т. д.
Обратите внимание, что проблема заключается только в отображении анимации - если вы прокрутите назад и назад, все будет выглядеть правильно.
В iOS 4.3Режим Automatic
, возможно, был разрешен для чего-то другого, кроме Fade
, поэтому там все работает (как вы пишете, они работают) - я не копался в этом.
Я не знаю, почему iOSпри этом выбирает режим Fade
.Но один из случаев, когда делает , - это когда ваш код запрашивает перезагрузку ранее повернутой ячейки, которая свернута и отличается от текущей повернутой ячейки.Обратите внимание, что ранее подключенная ячейка всегда перезагружается, эта строка в вашем коде всегда называется:
[indicesToReload addObject:[previousIndexPath_ copy]];
Это объясняет сценарий магических исчезающих ячеек, который вы описали.
Кстати, beginUpdates / endUpdates кажутся мне взломом.Предполагается, что эта пара вызовов содержит анимации, и вы не добавляете анимации в дополнение к строкам, которые вы уже просили перезагрузить.Все, что он сделал в этом случае, магическим образом заставляет режим Automatic
не выбирать Fade
в некоторых случаях - но это только затеняет проблему.
Последнее замечание: я играл с режимом Top
и обнаружил, что это также может вызвать проблемы.Например, при подключении следующего кода ячейки быстро исчезают:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];
}
Не уверен, что здесь есть реальная проблема (похожая на ту, с которой исчезает вид из окна в одно и то же время), или, может быть,Apple ошибка.