web-dev-qa-db-fra.com

Comment faire uiscrollview uniquement le défilement vertical pour ios?

J'essaie de créer layout à l'intérieur de scrollview à l'aide de ce tutoriel https://www.youtube.com/watch?v=UnQsFlMGDsI

Et obtenez le résultat suivant http://youtu.be/iPfzyLbEZMA

Il sera apprécié pour des conseils ou des liens de tutoriel. Il suffit de faire défiler verticalement

8
Alexey Zakevich

Je suis sûr qu'il doit y avoir d'autres moyens de le faire, mais voici une solution rapide:

1.) Créez une contrainte de largeur sur ContentView dans Storyborad.

2.) IBOutlet that widthContraint et définissez sa valeur sur la largeur du cadre de vue dans viewDidLoad.

Supposons que le nom de la sortie de contrainte est contentViewWidthContraint.

contentViewWidthContraint.constant = self.view.bounds.size.width;

Une autre alternative à partir de Storyboard consiste à fixer la largeur de Contentview à la largeur de la vue à partir du storyboard ou à Scrollview, si Scrollview a déjà une contrainte Egal width avec superview. Ajoutez la contrainte "Equal Width" de Contentview à self.view ou à Scrollview (si scrollview a déjà la contrainte de largeur)

10
Jen Jose

Avez-vous configuré la largeur "ContentView" pour qu'elle corresponde à la largeur de la vue de défilement? J'ai eu le même problème et j'ai corrigé avec " Equal Widths ".

" Equal Widths " indiquera à votre "ContentView" d'utiliser la même largeur que la "Vue défilement", ce qui devrait correspondre à l'écran si vous avez correctement configuré la contrainte.

Vous pouvez le faire facilement sur le storyboard.

  1. Glisser-déposer, avec le clic droit (important !!!), de "ContentView" à "ScrollView"
  2. Relâchez le clic, vous serez invité avec un menu, sélectionnez " Equal Widths ". 

    Prompted menu

Cela devrait résoudre votre problème en utilisant le scrollview avec AutoLayout de l’éditeur Storyboard.

Vous pouvez trouver un tutoriel complet sur l'utilisation de ScrollView avec Autolayout et Storyboard ici

J'espère que cela vous sera utile :)

8
Jesuslg123

Il existe également une autre possibilité qui offre un très bon résultat.

Vous pouvez cocher une case:

 enter image description here

O par programme:

scrollView.alwaysBounceVertical = true
3
Markus

Dans le Storyboard, définissez la largeur des éléments contenus dans votre UIScrollView égale à celle de cet UIScrollView (en sélectionnant tous les éléments et le maintien UIScrollView dans le panneau situé à gauche de votre Storyboard, puis en définissant la contrainte 'Equal Widths' sous 'en bas de votre Storyboard). Simplement épingler les côtés droits des éléments à celui de UIScrollView ne fonctionnera pas car il ajustera la taille de sa "vue d'affichage" à la largeur du plus grand élément et si celle-ci est inférieure à la largeur de UIScrollView, tous les éléments semble juste aligné sur son côté gauche. 

3
MCS

Essayez de régler sa largeur sur 0 et sa hauteur égale à la taille du contenu, comme ceci:

self.scrollView.contentSize = CGSizeMake(0, self.scrollView.contentSize.height);

Cela fonctionnera comme vous voulez. Essayez-le et dites-le s'il fait encore face à un problème.

0
iYoung

Pour désactiver le défilement horizontal, vous pouvez définir la taille du contenu dans la méthode -(void)scrollViewDidScroll.

[self.scrollView setContentOffset: CGPointMake(0, self.scrollView.contentOffset.y)];
self.scrollView.directionalLockEnabled = YES;
0
Vineeth Joseph

Trop définir les contraintes UIScrollView comme le code ci-dessous pour qu’il occupe tout l’écran. Ne pas dépasser la taille de l’écran.

Leading Space = 0 from mainView
Top Space = 0 from mainView
Bottom Space = 0 from mainView 
Trailing Space = 0 from mainView
0
Jatin Patel

En effet, la vue de défilement n'a aucune idée de la fin de votre contenu.

Mais quand au moins un élément de votre vue de défilement a sa contrainte "espace de fin" attachée à une vue en dehors de la vue de défilement (généralement une vue dans laquelle la vue de défilement est assise ou une autre vue d'un niveau supérieur, qui "connaît" sa largeur ) - la vue de défilement aura automatiquement une idée de la largeur souhaitée et ne défilera pas horizontalement (sauf si cette contrainte de fin implique que votre contenu se trouve en dehors de l’écran).

Il est préférable que tous les éléments de la vue de défilement aient leurs contraintes «d'espace de fin» connectées les unes aux autres ou à une vue en dehors de la vue de défilement. Mais pas la vue de défilement elle-même.

Aucun code supplémentaire ni contrainte supplémentaire nécessaire pour que cela fonctionne.

0
Vitalii

Vous devez définir la largeur de UIScrollView égale ou inférieure à la largeur de votre vue parente. Deux façons de le faire: 

1) Vous pouvez le faire dans Storyboard via des contraintes de présentation

2) Vous pouvez le faire par programme: 

self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.scrollView.contentSize.height);
0
M Abdul Sami