88 votes

comment faire pour désactiver le défilement horizontal de la scrollview iphone?

J'ai une vue comme l'iphone springboard. J'ai créé à l'aide d'un UIScrollView et UIButtons. Je veux désactiver scroling horizontal sur ce point de vue. Je ne veux que le défilement vertical. Comment dois-je faire?

124voto

Dave DeLong Points 156978

Vous devez définir le contentSize propriété de la UIScrollView. Par exemple, si votre UIScrollView est de 320 pixels de large (la largeur de l'écran), puis vous pouvez faire ceci:

CGSize scrollableSize = CGSizeMake(320, myScrollableHeight);
[myScrollView setContentSize:scrollableSize];

Le UIScrollView n'aura alors qu'à faire défiler l'écran verticalement, car il peut déjà afficher tout ce que l'horizontale.

87voto

Dinesh Raja Points 3509

Vous pouvez arrêter le défilement horizontal ou à la verticale de défilement dans l' ScrollViewDelegateMéthode. Ici, c'est comment,

Arrête Le Défilement Horizontal:

Si vous voulez faire défiler horizontalement, alors vous avez besoin pour augmenter la contentOffset.x. Empêcher que les arrêts de la scrollview de défilement dans le sens horizontal.

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    if (sender.contentOffset.x != 0) {
        CGPoint offset = sender.contentOffset;
        offset.x = 0;
        sender.contentOffset = offset;
    }

Arrête Le Défilement Vertical:

Si vous souhaitez faire défiler verticalement, alors vous avez besoin pour augmenter la contentOffset.y. Empêcher que les arrêts de la scrollview de défilement dans la direction verticale.

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    if (sender.contentOffset.y != 0) {
        CGPoint offset = sender.contentOffset;
        offset.y = 0;
        sender.contentOffset = offset;
    }

Le code ci-dessus empêche les changements en x et y d'un scrollview contentOffset et il conduit à arrêter le défilement en scrollViewDidScroll: méthode.

10voto

Mirko Brunner Points 546

depuis iOS7 utilisation

self.automaticallyAdjustsScrollViewInsets = NO;

//et de créer votre page de scroller avec 3 pages

    self.pageView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [self.pageView setContentSize:CGSizeMake(self.view.frame.size.width*3, self.view.frame.size.height)];
    [self.pageView setShowsVerticalScrollIndicator:NO];
    [self.pageView setPagingEnabled:YES];
    [self.view addSubview:self.pageView];

3voto

Zachzor Points 114

Une alternative pour la taille du contenu solution serait de bloquer le délégué

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGPoint offset = scrollView.contentOffset;
    if (offset.x != 0) {
        [scrollView setContentOffset:CGPointMake(0, offset.y)];
    }
}

Qui va encore permettre le défilement vertical

-13voto

zpesk Points 3049

si vous avez utilisé l'interface builder, vous pouvez sélectionner la scrollView et dans l'inspecteur, il existe une option pour désactiver le défilement horizontal.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X