Swift UIScrollView - mise en Œuvre Correcte que pour le Défilement Vertical
À l'avance, je m'excuse, je dirais que je suis un débutant avec iOS programmation.
Je veux utiliser UIScrollView
parce que le contenu dépasse la hauteur de l'écran.
Donc, je voudrais seulement un défilement vertical et non pas horizontal scrolling.
Je suis en utilisant la table de montage séquentiel pour dessiner les points de vue avec AutoLayout
.
Ici sont la capture d'écran de mon UIViewController
avec le UIScrollView
:
Puis-je modifier l'Étiquette d'un grand texte comme ça
override func viewDidLoad() {
super.viewDidLoad()
self.label1Label.text = "Seize jours après la chute du président Blaise Compaoré, le Burkina Faso a un nouveau chef d'EtatA l'issue d'ultimes tractions, civils et militaires se sont accordés, lundi 17 novembre, sur le nom du diplomate Michel KafandoSeize jours après la chute du président Blaise Compaoré, le Burkina Faso a un nouveau chef d'EtatA l'issue d'ultimes tractions, civils et militaires se sont accordés, lundi 17 novembre, sur le nom du diplomate Michel Kafando"
self.label1Label.numberOfLines = 0
self.label1Label.sizeToFit()
Mon problème est que si je n'ai pas définir manuellement une largeur de mon contentView (à l'intérieur de la UIScrollView
), le défilement est horizontale et non verticale. (Regardez la Capture d'écran ci-dessous):
J'ai essayé de mettre contentSize comme je l'ai vu dans de nombreux post google, mais sans succès :
self.scrollView.contentSize = CGSizeMake(400.0, 600.0)
Si j'ai mis une largeur manuellement pour mon contentview (i.e : 320pts
), le défilement vertical (BONNE) mais ensuite, en fonction de l'iphone taille, il ne couvre pas toute la largeur de l'écran, comme illustré dans la capture d'écran suivante :
La question est : qu'est-ce que la mise en œuvre correcte d'utiliser UIScrollView
d'avoir un contentView
que le respect de la contrainte de mise en page automatique (full screen : 0top - 0bottom - 0left - 0right
) et la barre de défilement pour seulement verticale.
Merci beaucoup pour votre aide!
OriginalL'auteur fabdarice | 2014-12-06
Vous devez vous connecter pour publier un commentaire.
Mike Woelmer montre comment faire cela correctement avec Interface Builder sur l'Objet Atomique blog.
http://spin.atomicobject.com/2014/03/05/uiscrollview-autolayout-ios/
J'ai aussi mon propre code uniquement (pas de storyboard de mise en œuvre) sur github.
https://github.com/nadthevlad/AutolayotScrollview
Vous ne voulez pas à la hauteur ou la largeur de votre contenu ou de points de vue.
Au lieu de cela vous voulez utiliser les mises en page automatiques pins et les contraintes pour définir la manière dont la scrollview se comporte.
Créer votre UIScrollView *scrollView.
Vous souhaitez créer une UIView *contentView qui vous permettra de mettre le reste de vos éléments.
Pin les 4 bords de la scrollView pour les 4 bords de l'auto.vue
Épinglez les bords supérieur et inférieur de contentView en haut et en bas de la scrollView.
C'est la partie la plus délicate. Pour définir le dimensionnement horizontal, vous voulez le premier (à droite) et de fuite(à gauche) les bords de la contentView à être épinglé à l'attaque et le bord de fuite de soi.vue au lieu de le scrollView. Même si contenView est un sous vue de la scrollView à l'horizontale, les contraintes sont d'aller à l'extérieur de la scrollView et se connecter à soi-même.vue.
Pin tout autre point de vue, les éléments de contentView comme vous le feriez normalement.
Vous n'avez pas à inclure l'affichage des éléments dans une vue. Ce n'est pas nécessaire. La clé est de s'assurer que les contraintes peuvent spécifier la dimension du contenu défilant. Apple note technique: "Les contraintes qui pèsent sur la sous-vues de défilement de la vue doit entraîner une taille à remplir, ce qui est interprété comme la taille du contenu de défilement de la vue. "Lien vers la note technique: developer.apple.com/library/ios/technotes/tn2154/_index.html
horizontale de dimensionnement à l'étape numéro 5 pourrait être résolu par la mise en ContentView largeur égale à la ScrollView largeur. il pourrait être fait de l'IB
J'ai été en mesure de le résoudre par la mise en au 4 coins de contentView à scrollView à l'étape 4 et l'étape 5, réglage de la largeur de contentView à celle de
self.view
Suivi les étapes exactement et il a frappé le clou sur la tête. Pensez également à ajouter une hauteur fixe pour le contenu à afficher et de définir la hauteur est supérieure à la hauteur de l'appareil pour tester la vitesse de défilement.
OriginalL'auteur NadtheVlad
L'astuce pour permettre à un UIScrollView pour faire défiler dans une seule direction, c'est de faire de la taille du contenu de la UIScrollView réservé dimension la même que la taille de la UIScrollView de l'image de la même dimension. Donc dans ce cas,
scrollview.contentSize.width
doit être égale àscrollview.frame.size.width
.Avec cela à l'esprit, essayez les solutions suivantes:
Vous assurer que vous avez des contraintes de la même manière que décrit dans cette réponse
Ajoutez le code suivant à votre vue-contrôleur:
Personnellement, je ne suis vraiment pas un fan de Mise en page Automatique. Si vous êtes intéressé à essayer ce sans Mise en page Automatique - ie. juste avec le code au lieu de contraintes que vous pourriez désactiver automatiquement la Mise en page pour l'affichage du contrôleur de visualiser et de modifier votre
viewWillLayoutSubviews
méthode pour ressembler à ceci:nope, toujours de défilement horizontale..
L'astuce consiste à calculer la taille sur
viewWillLayoutSubviews
!OriginalL'auteur gavdotnet
Cette façon, j'ai toujours le faire pour de défilement vertical du storyboard avec des contraintes :
1-faites glisser un viewcontroller
2-faites glisser une scrollview dans le contrôleur de l'écran principal avec les contraintes de L=0 , T =0 , T =0 et B = 0 de ses superview (contrôleur de la vue principale).
3-faites glisser une UIVIew dans le défilement de la vue à travailler comme d'affichage de contenu avec des contraintes de L-0,T=0,T=0,B=0 de ses superview(la scrollview)
4-pour stopper le défilement horizontal , faire de l'affichage du contenu de largeur égale à la scrollview avec contrainte.
5-prendre de la hauteur de l'affichage du contenu de l'égalité hauteur du contrôleur de vue , C'est temporaire jusqu'à nous de le remplir avec le contenu défilant .
6-ajouter des contrôles dans l'affichage du contenu jusqu'à la fin .
7-et le plus important de supprimer la contrainte que vous avez fait dans le point 5 de la hauteur de vue de contenu et au lieu de lui faire de la contrainte du contrôle sur le bas de contenu en vue de les fond d'alignement . Cela contribue à rendre l'affichage du contenu de haute commence à partir de la première commande sur le haut et le bas jusqu'au dernier contrôle (il est tout dépend de cette étape).
De 8 il suffit d'exécuter et les résultats devraient être comme prévu , sinon, s'il vous plaît laissez-moi savoir .
Espérons que cette aide!
OriginalL'auteur IsPha
- Je utiliser cette application pour seulement horizontale/verticale scrollviews, même si elle est en Objective-C, je vais essayer d'expliquer la logique si quelque chose n'est pas clair pour vous.
Maintenant la largeur de la contentSize propriété de la scrollview est attachée à la largeur réelle de l'écran de l'appareil, de sorte que le scrollview sera défilement uniquement dans le sens vertical.
Ce que je comprends, c'est un tutoriel code, pourriez-vous télécharger le projet ici?
OriginalL'auteur Richard Topchiy
Grâce à @NadtheVlad, j'ai enfin vu la lumière. Quelques tripoter m'a appris que contentView juste besoin d'être épinglé à scrollView du Haut, du Bas et de la Largeur. Pas besoin de faire référence à soi.vue.
Avec EasyPeasy, c'est tout simplement:
OriginalL'auteur jazzgil