Question

J'ai un UIScrollView avec pagination (donc le modèle typique avec un UIPageControl et un glissement / glissement vers la gauche et la droite entre les pages), et ça fonctionne très bien. Ce qui est étrange, c’est que lorsque je voulais me débarrasser des rebonds (pour que vous ne puissiez pas voir un noir derrière l’UI), la pagination ne fonctionne plus du tout.

En d'autres termes, quand:

scrollView.pagingEnabled = YES;
scrollView.bounces = YES;

Tout fonctionne bien, sauf que je n'aime pas les rebonds à la page (0) et à la page (longueur-1). Mais quand je fais ça:

scrollView.pagingEnabled = YES;
scrollView.bounces = NO;

Il cesse de se mettre en place sur chaque page et traite toutes les pages ensemble comme une longue page. Il semble donc que, pour une raison quelconque, la pagination dépend du renvoi, ce qui est bien tant que je peux arrêter le renvoi. Alors, y a-t-il un autre moyen de s'en débarrasser? Ou y a-t-il quelque chose que je fais de travers?

EDIT: La solution:

@interface PagingScrollView : UIScrollView
@end

@implementation PagingScrollView

- (id)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame])
    {
        self.pagingEnabled = YES;
        self.bounces = YES;
    }
    return self;
}

- (void)setContentOffset:(CGPoint)offset
{
    CGRect frame = [self frame];
    CGSize contentSize = [self contentSize];
    CGPoint contentOffset = [self contentOffset];

    // Clamp the offset.
    if (offset.x <= 0)
        offset.x = 0;
    else if (offset.x > contentSize.width - frame.size.width)
        offset.x = contentSize.width - frame.size.width;

    if (offset.y <= 0)
        offset.y = 0;
    else if (offset.y > contentSize.height - frame.size.height)
        offset.y = contentSize.height - frame.size.height;

    // Update only if necessary 
    if (offset.x != contentOffset.x || offset.y != contentOffset.y)
    {
        [super setContentOffset:offset];
    }
}

@end
Était-ce utile?

La solution

Votre meilleur choix serait d'écrire une sous-classe UIScrollView et d'implémenter le comportement souhaité manuellement. Vous devriez pouvoir commencer avec pagingEnabled et bounces tous deux définis sur YES , puis remplacer -setContentOffset: par votre propre méthode qui coupe les bords.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top