Il existe une option dans IB pour décocher le défilement vertical dans une vue à défilement, mais cela ne semble pas fonctionner.
Comment définir l'affichage de défilement pour qu'il défile uniquement horizontalement et non verticalement dans le code plutôt que dans IB?
Essayez de définir la hauteur de contentSize à la hauteur de scrollView. Ensuite, le défilement vertical doit être désactivé car il n’y aurait rien à faire défiler verticalement.
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);
depuis iOS7:
first: la largeur de la taille du contenu doit être égale à la largeur de votre scrollview
deuxième: dans votre initWithNibName:
self.automaticallyAdjustsScrollViewInsets = NO;
C'est ça.
oui, la réponse de pt2ph8 est juste,
mais si, pour une raison quelconque, votre contentSize devait être supérieur à UIScrollView, vous pouvez désactiver le défilement vertical implémentant la méthode du protocole UIScrollView.
-(void)scrollViewDidScroll:(UIScrollView *)aScrollView;
il suffit d'ajouter 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 simplement la méthode appelée lorsque l'utilisateur fait défiler votre UIScrollView, ce qui force le contenu à toujours conserver le même .y
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.
Vous devez indiquer 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);
J'ai mis à jour la taille du contenu pour désactiver le défilement vertical, et la possibilité de faire défiler restait toujours. Ensuite, j'ai compris que je devais aussi désactiver le rebond vertical, pour désactiver complètement le défilement.
Peut-être y a-t-il aussi des gens avec ce problème.
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
[aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x,0)];
}
vous devez avoir confirmé à UIScrollViewDelegate
aScrollView.delegate = self;
Il suffit de définir le y pour être toujours au top. Besoin de se conformer à UIScrollViewDelegate
func scrollViewDidScroll(scrollView: UIScrollView) {
scrollView.contentOffset.y = 0.0
}
Cela conservera l'effet Décélération/Accélération du défilement.
Sur iOS 11, n'oubliez pas d'ajouter ce qui suit, si vous souhaitez créer une vue à défilement qui colle à l'écran plutôt qu'à une zone sécurisée.:
if (@available(iOS 11.0, *)) {
[self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}