Vue de défilement
J'ai un UIScrollView, avec des contraintes left: 0, top: 0, right: 0, bottom: 0
Vue de défilement intérieure
En haut de cette UIScrollView
est un UIImageView
avec des contraintes left: 0, top: 0, right: 0, height: 200
En dessous, j'ai un UITextView
avec des contraintes left: 0, top: 0, right: 0, bottom: 0
Cela signifie que le UITextView
sera redimensionné par rapport à son contenu, et j'ai défini le scrollingEnabled
sur false
pour le UITextView
.
Donc, quand je cours, cela presque fonctionne parfaitement.
Le seul problème est que UIImageView
occupe environ 10% de plus que la largeur réelle de l'écran. Par conséquent, le défilement horizontal est activé.
J'ai essayé d'ajouter les lignes
imageView.frame = CGRect(0, 0, screenSize.width, 200)
scrlView.contentSize.width = screenSize.width
mais cela ne fait aucune différence. Je peux toujours faire défiler horizontalement et la vue d'image occupe toujours environ 10% de plus que la largeur réelle de l'écran.
Remarque, je n'ai pas défini la largeur de l'écran imageView dans le storyboard, uniquement par programme.
Des idées?
Comme ça,
func scrollViewDidScroll(scrollView: UIScrollView) {
if scrollView.contentOffset.x>0 {
scrollView.contentOffset.x = 0
}
}
Et, vous pouvez définir cette propriété:
scrollImg.directionalLockEnabled = true
J'ai changé cela pour qu'il renvoie juste 0. Pas besoin de vérifier du tout si vous voulez faire défiler.
func scrollViewDidScroll(scrollView: UIScrollView) {
scrollView.contentOffset.x = 0
}
Pas besoin de verrouillage directionnel.
Swift 4
Verrouillage du défilement horizontal
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.x != 0 {
scrollView.contentOffset.x = 0
}
}
Vous pouvez changer le x en y pour le défilement vertical.
Assurez-vous d'ajouter UIScrollViewDelegate comme ceci:
class MyViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet var scrollView: UIScrollView!
...
}
Et définissez le délégué pour ScrollView
scrollView.delegate = self
func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.x = 0
}
Cela empêche également la vue de défilement de défiler vers le bord d'attaque.
Si vous utilisez le storyboard et la mise en page automatique, vous devez considérer le fonctionnement de ScrollView dans Storyboard avec la mise en page automatique.
Considérer ce qui suit.
Ajoutez une vue unique sur votre scrollView avec les contraintes gauche, droite, haut, bas, hauteur, largeur,
Faire la sortie de la largeur et de la hauteur
Ajoutez vos sous-vues à la vue que vous avez ajoutée dans le scrollView
mettre à jour la largeur de l'écran par exemple: 320 pour iPhone5 ou 4.
self.viewWidth = SCREEN_WIDTH;
[self.view updateConstraints];