Comment faire défiler un UIScrollView vers le haut?
ios
objective-c
iphone
uiscrollview
uikit
Jack Humphries
la source
la source
UIScrollView
contentInset
, malheureusement.[self.scrollView setContentOffset:CGPointMake(self.scrollView.contentOffset.x, -self.scrollView.contentInset.top) animated:YES];
fait le travail pour moi[scrollView setContentOffset:CGPointMake(0, -scrollView.contentInset.top) animated:YES];
Cela fonctionne sous iOS 6 & 7[scrollView setContentOffset:CGPointMake(0, scrollView.contentSize.height-scrollView.frame.size.height) animated:YES];
Voici une extension Swift qui facilite les choses:
Usage:
la source
iOS 11 et supérieur
essayez de travailler avec le nouveau
adjustedContentInset
.Par exemple (faites défiler vers le haut):
la source
Pour Swift 4
la source
Utilisation
setContentOffset:animated:
la source
Réponse pour Swift 2.0 / 3.0 / 4.0 et iOS 7+:
la source
Dans iOS7, j'ai eu du mal à obtenir une vue de défilement particulière pour aller en haut, ce qui fonctionnait dans iOS6, et je l'ai utilisée pour définir la vue de défilement pour aller en haut.
la source
Version Swift 3.0.1 de la réponse de Rob Mayoff :
la source
Pour répliquer complètement le comportement scrollToTop de la barre d'état, nous devons non seulement définir le contentOffset, mais également nous assurer que les scrollIndicators sont affichés. Sinon, l'utilisateur peut se perdre rapidement.
La seule méthode publique pour y parvenir est
flashScrollIndicators
. Malheureusement, l'appeler une fois après avoir défini contentOffset n'a aucun effet car il est réinitialisé immédiatement. J'ai trouvé que cela fonctionnait lorsque je faisais le flash à chaque foisscrollViewDidScroll:
.Dans votre UIScrollViewDelegate (ou UITable / UICollectionViewDelegate) implémentez ceci:
Le délai de masquage est un peu plus court par rapport au comportement scrollToTop de la barre d'état, mais il a toujours l'air agréable.
Notez que j'abuse de la balise de vue pour communiquer l'état "isScrollingToTop" parce que j'en ai besoin à travers les contrôleurs de vue. Si vous utilisez des balises pour autre chose, vous voudrez peut-être les remplacer par une iVar ou une propriété.
la source
Je pense avoir une réponse qui devrait être entièrement compatible avec iOS 11 ainsi que les versions antérieures (pour le défilement vertical)
Cela prend en compte le nouvel ajustéContentInset et tient également compte du décalage supplémentaire requis lorsque prefersLargeTitles est activé sur la barre de navigation, ce qui semble nécessiter un décalage supplémentaire de 52px en plus de la valeur par défaut.
C'était un peu délicat car l'ajustéContentInset change en fonction de l'état de titleBar (grand titre vs petit titre), je devais donc vérifier et voir quelle était la hauteur de titleBar et ne pas appliquer le décalage de 52px s'il était déjà dans le grand état. Impossible de trouver une autre méthode pour vérifier l'état de la barre de navigation, donc si quelqu'un a une meilleure option que de voir si la hauteur est> 44,0, j'aimerais l'entendre
Inspiré de la solution de Jakub
la source
Il est très courant que votre barre de navigation chevauche la petite partie du contenu scrollView et qu'il semble que le contenu ne commence pas par le haut. Pour le réparer, j'ai fait 2 choses:
la source
Défilement vers le haut pour
UITableViewController
,UICollectionViewController
ou toutUIViewController
ayantUIScrollView
la source
Dans SWIFT 5, réglez simplement le décalage de contenu à zéro
la source
J'ai essayé toutes les manières. Mais rien n'a fonctionné pour moi. Finalement, j'ai aimé ça.
J'ai ajouté une
self.view .addSubview(self.scroll)
ligne de code dans le viewDidLoad. Après avoir commencé à configurer le cadre pour la vue de défilement et ajouté des composants pour la vue de défilement.Cela a fonctionné pour moi.
Assurez-vous d'avoir ajouté une
self.view .addSubview(self.scroll)
ligne au début. alors vous pouvez ajouter des éléments d'interface utilisateur.la source