У меня есть таблица, для которой я делаю специальную загрузку.Пользователь начинает прокручиваться вниз.Когда пользователь прокручивает вверху страницы, я обнаруживаю это с помощью методов делегирования представления прокрутки, и я быстро загружаю некоторый дополнительный контент и заполняю большую часть верхней части списка.Я хочу, чтобы это выглядело безупречно, как «бесконечный свиток» вверх.Для этого мне нужно установить смещение контента, чтобы пользователь не видел, как таблица «прыгает» вверх.Когда я медленно прокручиваю, это работает отлично.Когда я прокручиваю быстро, чтобы таблица замедлялась, смещение содержимого, которое я установил, игнорируется.Вот код, который я использую:
CGFloat oldHeight = self.tableView.contentSize.height;
CGFloat oldOffset = self.tableView.contentOffset.y;
self.tableContentsArray = newTableContentsArray;
[self.tableView reloadData];
CGFloat newHeight = self.tableView.contentSize.height;
CGFloat newOffset = oldOffset + (newHeight - oldHeight);
self.tableView.contentOffset = CGPointMake(0, newOffset);
Так что, если я быстро прокручиваю вверх с таблицей высотой 100px и достигаю вершины при замедлении, я загружаю больше данных, получаю новую высоту таблицы, скажем,250px.Я установил смещение на 150. Однако, поскольку оно все еще замедляется, код Apple оставляет смещение, установленное на 150, на 0,1 секунды или около того, затем переходит к следующему вычисленному смещению для замедления и устанавливает смещение на 0, что делает егоПосмотрите на пользователя, как будто он только что пропустил 150px контента и теперь находится в новой верхней части списка.
Теперь я ЛЮБЛЮ, чтобы сохранить ускорение в списке, чтобы оно продолжало растив то время как, замедляется и заканчивается где-то около 120px смещения, как вы и ожидали.Вопрос в том, как?
Если я использую [self.tableView setContentOffset: CGPointMake(0, newOffset) animated: NO];
, это останавливает игнорирование смещения содержимого, но останавливает список мертвым.