Il existe une option dans IB pour décocher le défilement vertical sur un scrollview, mais cela ne semble pas fonctionner.
Comment le scrollview peut-il être configuré pour ne faire défiler que horizontalement et non verticalement dans le code plutôt que dans IB?
iphone
ios
uiscrollview
système
la source
la source
Réponses:
Essayez de définir la hauteur de contentSize sur la hauteur de scrollView. Ensuite, le défilement vertical devrait être désactivé car il n'y aurait rien à faire défiler verticalement.
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);
la source
depuis iOS7:
d'abord: la largeur de la taille du contenu doit être égale à la largeur de votre scrollview
second: dans votre initWithNibName:
self.automaticallyAdjustsScrollViewInsets = NO;
C'est ça.
la source
oui, la réponse de pt2ph8 est juste,
mais si, pour une raison étrange, votre contentSize doit être supérieur à UIScrollView, vous pouvez désactiver le défilement vertical implémentant la méthode de protocole UIScrollView
-(void)scrollViewDidScroll:(UIScrollView *)aScrollView;
ajoutez simplement ceci dans votre UIViewController
float oldY; // here or better in .h interface - (void)scrollViewDidScroll:(UIScrollView *)aScrollView { [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, oldY)]; // or if you are sure you wanna it always on top: // [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, 0)]; }
c'est juste la méthode appelée lorsque l'utilisateur fait défiler votre UIScrollView, et ce faisant, vous forcez son contenu à avoir toujours le même .y
la source
float oldY;
reportez-vous au code ci-dessus. C'est un symbole de variable de style C pour par application, la variable DOIT être déclarée comme un membre d'instance de la classe de contrôleur.Inclure la méthode suivante
-(void)viewDidLayoutSubviews{ self.automaticallyAdjustsScrollViewInsets = NO; }
et définissez la largeur de la taille du contenu de la vue de défilement égale à la largeur de la vue de défilement.
la source
Vous devez passer 0 dans la taille du contenu pour désactiver la direction souhaitée.
Pour désactiver le défilement vertical
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,0);
Pour désactiver le défilement horizontal
scrollView.contentSize = CGSizeMake(0,scrollView.contentSize.height);
la source
J'ai mis à jour la taille du contenu pour désactiver le défilement vertical, et la possibilité de faire défiler est restée. Ensuite, j'ai compris que je devais également désactiver le rebond vertical, pour désactiver complètement le défilement.
Peut-être qu'il y a aussi des gens avec ce problème.
la source
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView { [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x,0)]; }
vous devez avoir confirmé à
UIScrollViewDelegate
aScrollView.delegate = self;
la source
Réglez simplement le y pour qu'il soit toujours au top. Besoin de se conformer à UIScrollViewDelegate
func scrollViewDidScroll(scrollView: UIScrollView) { scrollView.contentOffset.y = 0.0 }
Cela conservera l'effet de décélération / accélération du défilement.
la source
Sur iOS 11, n'oubliez pas d'ajouter ce qui suit, si vous souhaitez créer une vue de défilement qui colle aux limites de l'écran plutôt qu'à une zone de sécurité:
if (@available(iOS 11.0, *)) { [self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever]; }
la source
Depuis iOS11, on peut utiliser la propriété suivante
let frameLayoutGuide: UILayoutGuide
Si vous définissez des contraintes pour frameLayoutGuide.topAnchor et frameLayoutGuide.bottomAnchor sur les mêmes ancres d'une sous- vue de votre scrollView, le défilement vertical sera désactivé et la hauteur de la scrollView sera égale à la hauteur de sa sous-vue.
la source
La solution la plus évidente est d'interdire les changements de coordonnées y dans votre sous-classe.
override var contentOffset: CGPoint { get { return super.contentOffset } set { super.contentOffset = CGPoint(x: newValue.x, y: 0) } }
C'est la seule solution appropriée dans les situations où:
la source
Beaucoup de réponses incluent la mise
contentOffset
à 0. J'ai eu un cas dans lequel je voulais que la vue à l'intérieur de scrollView soit centrée. Cela a fait le travail pour moi:public func scrollViewDidScroll(_ scrollView: UIScrollView) { scrollView.contentOffset.y = -scrollView.contentInset.top }
la source