iphone - hello - ios sdk download




Comment empêcher un UIScrollView de rebondir horizontalement? (7)

J'ai un UIScrollView qui montre des données verticales, mais où le composant horizontal n'est pas plus large que l'écran de l'iPhone. Le problème est que l'utilisateur peut toujours faire glisser horizontalement et exposer des sections vierges de l'interface utilisateur. J'ai essayé le réglage:

scrollView.alwaysBounceHorizontal = NO;
scrollView.directionalLockEnabled = YES;

Ce qui aide un peu, mais n'empêche toujours pas l'utilisateur de pouvoir glisser horizontalement. Sûrement il y a un moyen de résoudre ce problème facilement?


Assurez-vous que contentSize de UIScrollView n'est pas plus large que UIScrollView lui-même. Dans mes propres applications, c'était suffisant pour éviter le défilement horizontal, sauf dans les cas où je devais vraiment fou de glisser dans des directions aléatoires (par exemple, lancer un défilement alors que la vue était encore en train de décélérer).


C'est étrange, car chaque fois que je crée une vue défilée avec un cadre et une taille de contenu dans les limites de l'écran de chaque dimension, la vue défilante ne défile pas (ou rebondit) dans cette direction.

// Should scroll vertically but not horizontally
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
scrollView.contentSize = CGSizeMake(320, 1000);

Êtes-vous sûr que le cadre s'intègre complètement dans l'écran et que la largeur de contentSize n'est pas supérieure à la largeur de la vue déroulante?


Quelque chose à garder à l'esprit: vous savez qu'il n'y a rien de plus à voir horizontalement, mais vos utilisateurs le sauront-ils? Vous pouvez vouloir un peu de rebond horizontal, même s'il n'y a pas de contenu supplémentaire à afficher horizontalement. Cela permet à l'utilisateur de savoir que ses tentatives de défilement horizontal ne sont pas ignorées, il n'y a juste rien à voir. Mais, oui, souvent vous ne voulez vraiment pas le rebond.


Ma version pour webViews, une solution commune:

- (void)webViewDidFinishLoad:(UIWebView *)webView {

[webView.scrollView setContentSize: CGSizeMake(webView.frame.size.width, webView.scrollView.contentSize.height)];

}

Si une vue défile (et rebondit) horizontalement dépend de trois choses:

  • La taille du contenu
  • Les encarts de contenu gauche et droit
  • La largeur de la vue de défilement -

Si la vue déroulante peut s'adapter à la taille du contenu plus les encarts, elle ne défile pas ou ne rebondit pas.

Évitez les rebonds horizontaux comme suit:

scrollView.contentSize = CGSizeMake(scrollView.frame.size.width - scrollView.contentInset.left - scrollView.contentInset.right, height);

J'ajoute cette réponse car les précédentes n'ont pas pris en compte contentInset.


scrollView.bounces = NO;

A travaillé pour moi.


Cela fonctionne pour moi dans Swift:

scrollView.alwaysBounceHorizontal = false
scrollView.bounces = false






cocoa-touch