РЕДАКТИРОВАТЬ: Первоначально я задавал этот вопрос в отношении изменения размера общего вида, но теперь я понимаю, что это нечто более специфичное для tableViews.
Скажем, что у tableView изначально есть рамка (0 0, 320 460), то есть он заполняет весь экран iPhone. Для изменения размера таблицы и анимации изменения размера я отображаю следующий код на кнопку:
[UIView beginAnimations:@"Animation" context:nil];
[UIView setAnimationDuration:3];
CGRect rect = self.table.bounds;
rect.size = CGSizeMake(320, 200);
self.table.bounds = rect;
self.table.center = CGPointMake(160, 100);
[UIView commitAnimations];
Этот код будет анимировать высоту таблицы вниз, НО ... до того, как произойдет какая-либо анимация, таблица обрежет все ячейки таблицы, которые не вписываются в новые границы. Таким образом, учитывая tableView, который изначально умещается в 10 строк, приведенный выше код анимации вызовет следующую последовательность событий:
- TableView немедленно удаляет нижние 5 строк. Обратите внимание, что он удаляет только строки - фон tableView все еще распространяется вниз.
- TableView анимирует изменение высоты для остальной части таблицы, как и ожидалось.
Это не то поведение, которое я ищу. Вместо того, чтобы сразу обрезать нижние 5 строк, tableView должен сохранять свои строки на месте, а нижний край таблицы просто анимирует вверх.
Исходя из поведения, которое я наблюдаю, кажется, что tableView получает какое-то сообщение для обновления своих строк сразу после того, как он обнаруживает, что его границы будут меняться. Может ли кто-то пролить свет на это поведение и как мне избежать этого?