Question

J'ai un Tremplin comme UIView iPhone. Je l'ai créé à l'aide d'un et UIScrollView UIButtons. Je veux désactiver le défilement horizontal sur ledit scrollview. Je ne veux que le défilement vertical. Comment puis-je y parvenir?

Était-ce utile?

La solution

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

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

La seule alors <=> défiler verticalement, car il peut déjà afficher tout horizontalement.

Autres conseils

MISE À JOUR: (Après @EranMarom a sur son commentaire)

Vous pouvez arrêter le défilement horizontal ou vertical défilement dans la méthode ScrollViewDelegate. Ici, il est comment,

Arrête Défilement horizontal:

Si vous voulez faire défiler horizontalement, vous devez augmenter la contentOffset.x. Prévention qui arrête le défilement de scrollview dans le sens horizontal.

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.x = 0.0
}

Arrête défilement vertical:

Si vous voulez faire défiler verticalement, vous devez augmenter la contentOffset.y. Prévention qui arrête le défilement de scrollview dans la direction verticale.

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.y = 0.0
}

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

depuis l'utilisation iOS 7

self.automaticallyAdjustsScrollViewInsets = NO;

// et créer vous défileur de page 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];
  

Solution Swift

Créer deux sorties, une pour votre point de vue et une pour votre point de vue de défilement:

@IBOutlet weak var myView: UIView!
@IBOutlet weak var scrollView: UIScrollView!

Ensuite, dans votre viewDidLayoutSubviews vous pouvez ajouter le code suivant:

let scrollSize = CGSize(width: myView.frame.size.width, 
                        height: myView.frame.size.height)
scrollView.contentSize = scrollSize

Ce que nous avons fait est recueilli la hauteur et la largeur de la vue et définir la taille du contenu scrollViews pour le match. Ceci empêchera votre scrollview de défilement horizontal.


Plus Pensées:

CGSizeMake a une largeur et hauteur à l'aide CGFloats. Vous devrez peut-être utiliser votre UIScrollViews hauteur existante pour le second paramètre. Ce qui ressemblerait à ceci:

let scrollSize = CGSize(width: myView.frame.size.width, 
                        height: scrollView.contentSize.height)

Vous pouvez sélectionner la vue, puis sous décocher Attributes Inspector User Interaction Enabled.

Dans mon cas, la largeur de la contentView était supérieure à la largeur de UIScrollView et qui était la raison de défilement horizontal indésirables. Je l'ai résolu en fixant la largeur de contentView égale à la largeur de UIScrollView.

it helps quelqu'un

Dans mon cas, avec Swift 4.2 vous pouvez utiliser:

Désactiver défilement vertical:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    scrollView.contentOffset.y = 0.0
}

Désactiver défilement horizontal:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    scrollView.contentOffset.x = 0.0
}

Une fois que je l'ai fait remplacer le UIScrollView avec un UITableView avec seulement 1 cellule, il a bien fonctionné.

J'ai eu le tableview contentInset situé dans viewDidLoad (comme ci-dessous) que ce qui provoque le défilement horizontal

self.tableView.contentInset = UIEdgeInsetsMake(0, 30, 0, 0);

Vérifiez s'il y a des tableview contentInset défini pour des raisons différentes et désactiver

Je débattais avec cela pendant un certain temps à essayer en vain les diverses suggestions dans ce domaine et d'autres sujets.

Cependant, dans un autre thread (ne sais pas où) quelqu'un a suggéré que l'utilisation d'une contrainte négative sur la UIScrollView travaillaient pour lui.

J'ai donc essayé différentes combinaisons de contraintes avec des résultats incohérents. Ce qui a finalement fonctionné pour moi était d'ajouter de premier plan et des contraintes de fuite de -32 à scrollview et ajouter un (invisible) textview avec une largeur de 320 (et centré).

Essayez ceci:

CGSize scrollSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, scrollHeight);
[scrollView setContentSize: scrollSize];

Cette seule ligne.

self.automaticallyAdjustsScrollViewInsets = NO;

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