Начиная с ответа k06a , я немного усовершенствовал его, чтобы он больше походил на настоящий постраничный UITableView. Различия в поведении довольно заметны с полноэкранными строками таблицы. Даже мини-щелчок в любом направлении должен прокрутить таблицу до следующей страницы: я делаю это, сначала проверяя скорость.
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset
{
CGFloat rowHeight = tableView.rowHeight;
int verticalOffset = ((int)targetContentOffset->y % (int)rowHeight);
if (velocity.y < 0)
{
targetContentOffset->y -= verticalOffset;
}
else if (velocity.y > 0)
{
targetContentOffset->y += (rowHeight - verticalOffset);
}
// No velocity, snap to closest page
else
{
if (verticalOffset < rowHeight / 2)
{
targetContentOffset->y -= verticalOffset;
}
else
{
targetContentOffset->y += (rowHeight - verticalOffset);
}
}
}
Обратите внимание, что дополнительно устанавливается
self.tableView.decelerationRate = UIScrollViewDecelerationRateFast;
в viewDidLoad:
делает его ближе к реальной вещи, но не совсем.
Я возился с настройкой еще более высоких скоростей замедления, используя код , показанный здесь , но я не смог сделать это правильно.