A partir de k06a's answer, je l'ai affiné un peu il fonctionne plus comme le vrai UITableView paginé. Les différences de comportement sont assez perceptibles avec les lignes du tableau en plein écran. Même un mini-film dans les deux sens devrait faire défiler le tableau vers la page suivante: Je le fais en vérifiant d'abord la vélocité.
- (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);
}
}
}
Notez que la définition plus
self.tableView.decelerationRate = UIScrollViewDecelerationRateFast;
en viewDidLoad:
rend plus proche de la vraie chose, mais pas tout à fait.
J'ai trituré avec réglage des taux de décélération encore plus rapides en utilisant le code shown here mais je ne pouvais pas le faire correctement.
n'a pas vraiment travailler pour moi. De plus, parce que vous utilisez DidEndDecelerating, le code n'est pas appelé quand il n'y a pas de décélération (ie: si la table n'est pas "feuilletée", mais doucement) – pixelfreak
Donc, vous devez ajouter le même code à - (void) scrollViewDidEndDragging :(UIScrollView *) scrollView willDecelerate: (BOOL) décélère si willDecelerate: (BOOL) decelerate est faux – Julien
@Julien Yep, j'ai oublié de coller la seconde méthode. Personne ne l'a remarqué pendant plus d'un an! Thx – maxcanna