UIScrollView AutoLayout Vertical uniquement
Je veux obtenir la mise en page automatique de travail avec le UIScrollView
et vais avoir un peu de mal avec elle. Voici ce que j'ai fait:
- Ajouter un
UIScrollView
à l'intérieur de la Vue Principale avec cadre: [top: 0, left: 0, largeur: 320, hauteur: 568] - Ajouter
UIView
"ContentView" à l'intérieur de laUIScrollView
avec le cadre et les bgcolor noir: [top: 0, left: 0, largeur: 320, hauteur: 568] - Installation
UIScrollView
contraintes: [top: 0, bas: 0, left: 0, droite: 0] - Setup "ContentView" contraintes: [top: 0, bas: 0, left: 0, droite: 0]
- Aligner les éléments à l'intérieur de la "ContentView"
- Définir Vue Principale bgcolor gris (pour voir ce qu'il se passe)
Voici une capture d'écran du problème: http://imgur.com/P8s9lB0
Pour une raison quelconque, les contraintes de mettre le contenu en vue d'être au milieu de l'écran. Aussi, il défile dans tous les sens. Je veux que le contenu de défilement uniquement dans le sens vertical comme dans UITableView
de sorte que je ne peux pas bouger comme ça: http://imgur.com/lBCwfAS
Ce que je fais mal? J'ai vérifié tous les tutoriels et les réponses que je peux trouver dans StackOverflow et Google, et personne n'a en fait juste un problème bizarre, je suis donc demander de l'aide.
EDIT: j'ai aussi ajouté ContentView la largeur et la hauteur comme des contraintes et cela n'a pas aide non plus.
source d'informationauteur Gasim
Vous devez vous connecter pour publier un commentaire.
Pour désactiver le défilement horizontal, vous pouvez définir la taille du contenu dans le (void)scrollViewDidScroll méthode.
Vous aurez également besoin de définir l'orientation de verrouillage alors que de 1 la direction de défilement est utilisée à la fois. https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScrollView_Class/index.html#//apple_ref/occ/instp/UIScrollView/directionalLockEnabled
Vous pouvez le faire entièrement à l'aide de contraintes et il est vraiment facile.
La
UIScrollView
juste besoin de comprendre comment beaucoup de la largeur et de l'espace qu'il a à l'intérieur. Il doit donc avoir quelque chose épinglé à laLeading
Trailing
Top
&Bottom
contraintes. Aussi la largeur et la hauteur du contenu doit être fixe (cela ne veut pas dire que je specificy. Je peux encore utiliser les contraintes pour atteindre cet objectif.)UIScrollView
et la position que nécessaire.UIView
à l'intérieur de laUIScrollView
pour le contenu.Leading
Trailing
Top
&Bottom
contraintes du contenuUIView
à 0.Equal Width
contrainte à laUIScrollView
etUIView
. Cela permettra à défilement vertical uniquement.UIView
. Vous pouvez ensuite spécifier la hauteur de l'affichage du contenu (blech) ou utiliser la hauteur des contrôles contenus dans en vous assurant que la partie inférieure de contrôle est limité à la partie inférieure de l'affichage du contenu.Je l'ai fait et il a travaillé un régal.
Pour résumer la Leszek S' réponse:
Afin d'avoir un défilement vertical vue, tous les points de vue à l'intérieur de défilement de la vue doivent avoir leur largeur contrainte ensemble. Facile de régler le défilement de la vue superview.
La raison en est que le défilement de la vue ne pas faire défiler horizontalement de sorte que tant qu'aucun de ses sous-vues besoin de faire défiler horizontalement. Par exemple, si vous avez une étiquette, mettre à 0 les lignes, mise en page automatique vais essayer de faire de l'étiquette aussi large que possible avant qu'il commence à ajouter des lignes et des sauts de ligne. Si il n'y a pas explicite largeur de contraintes sur l'étiquette, il va juste faire le défilement de l'affichage de la zone de contenu plus large. Contraintes pour la fuite de défilement de la vue sont ignorés.
Si vous avez un tas de points de vue, vous pouvez les mettre dans un seul contenant de vue comme dans la vidéo. Pour mon cas, je n'ai que 5 ou 6 étiquettes qui peuvent changer dynamiquement la hauteur, mais ne doit jamais modifier la largeur, donc je viens de faire tous de la même largeur que le défilement de l'affichage. Et bingo, à la verticale de défilement de la vue avec des étiquettes qui croissent ou décroissent en fonction du texte.
J'ai écrit une fonction qui permet de faire défiler le contenu vers le haut, mais pas horizontalement. Il crée une UIView avec la largeur limitée à l'intérieur de scrollview et incorpore toutes scrollview des sous-vues.
https://github.com/exchangegroup/scrollable-content-ios
Donner l'affichage du contenu explicite de la hauteur et la largeur des contraintes
Ci-dessous est un extrait de code que j'ai utilisé pour réaliser un vertical seulement de défilement de la vue.
Il fonctionne par l'ajout d'un affichage de contenu comme un enfant à la vue d'un parchemin, puis le fait de contraindre la largeur de l'affichage du contenu de la largeur de la mère de défilement de la vue. À partir de là, tous les sous-vues doit être ajouté à la vue de contenu plutôt que de le faire défiler la vue.
Avec @derek réponse que je voudrais ajouter que la mise contentOffset toujours dans scrollViewDidScroll sera la cause de problème de performances . Veuillez donc vérifier seulement si x est différent de 0 alors définir contentOffset
et oui à la scrollview