Comment réinitialiser la position de mon UIScrollView après le retour d'une transition modale?
J'ai une simple vue contenant une longue vue avec beaucoup de boutons, avec le tout étant dans un UIScrollView
. Le scroller
fonctionne bien, et je peux scroll
vers le bas et cliquez sur un button
. Chaque button
déclenche un modal seque to
un autre view
. Que de nouvelles view
est alors démis de ses fonctions par l'interaction de l'utilisateur, provoquant l'original UIScrollView's view
pour charger à nouveau.
Voici le problème: Si je clique sur un bouton vers le haut de la UIScrollView
j'entre dans le modal segue
de rejeter la nouvelle view
et de retour à la UIScrollView's view
sans problème. Mais, si je clique sur un des boutons vers le bas de la UIScrollView
quand je retourne seque
puis de retour, ma défilement est tout foiré. Je ne vois que la zone sous mon scroller
et ne peut pas scroll
sauvegarder vers le haut!
Je suis assez sûr qu'il y a moyen de réinitialiser le UIScrollView's
de début et de fin des points sur ViewWillAppear
mais je ne peux pas le comprendre. Toute aide est appréciée!
Aussi, pour info, j'ai simplement ajouté le UIScrollView
par interface builder, et n'ont pas mis en œuvre ou synthétisés nulle part encore.
source d'informationauteur jake9115
Vous devez vous connecter pour publier un commentaire.
essayez ce code:
Veuillez noter: le bug de cette question et la réponse est sur le point semble être résolu dans iOS 7. Le reste de cette réponse n'est pertinente que pour iOS 6 (et probablement plus tôt).
Le comportement présenté ici est un bug dans le
UIScrollView
classe. Comme indiqué par l'OP, après son retour d'un modal présentéUIViewController
à une scène contenant unUIScrollView
leUIScrollView
prend tout ce qu'il est actuellement affichée et commence à se comporter comme si c'était son origine. Cela signifie que si vous vous défilez vers le bas de votre barre de défilement de la vue avant modal de présenter un autre point de Vue Contrôleur, vous ne pouvez pas revenir en arrière jusqu'à son retour à la scène avec le défilement de l'affichage.La même chose se produit lorsque vous supprimez le Défilement de l'Affichage de la vue de la hiérarchie et de l'ajouter de nouveau, sans même changer de fenêtre.
Vous pouvez contourner ce problème en définissant la
contentOffset
de défilement de la vue arrière de{0,0}
avant qu'il s'affiche de nouveau après avoir écarté le modèle-Vue-Contrôleur. Si vous voulez vraiment préserver le point de l'utilisateur a été affichée avant qu'ils déclenché le modal, puis après laUIScrollView
est réaffiché vous pouvez définir lacontentOffset
revenir à ce qu'il était avant de le réinitialiser.Voici un
UIScrollView
sous-classe qui corrige le bug sans réinitialiser le défilement de l'affichage vers le haut chaque fois que vous revenez d'un modal:Si vous préférez le faire dans un
UIViewController
que dans unUIScrollView
sous-classe, changement du contenu du décalage dans leviewWillAppear:
etviewDidAppear
méthodes.Si vous ne souhaitez pas conserver, où l'utilisateur la position de défilement lorsqu'ils reviennent d'un modal, et vous voulez juste pour faire défiler la
UIScrollView
retour vers le haut, comme l'OP demandé, tous vous avez besoin est encore plus simple:Tout d'abord, merci approuvé pour la réponse ci-dessus. Quelqu'un a mentionné qu'il n'était plus applicable, mais j'ai un défilement de l'affichage à l'intérieur de la vue de la table de la cellule et il doit être réinitialisé lorsque la cellule est réutilisé.
Voici la solution rapide.
Pour résoudre ce problème, j'utilise ce code:
Vous pouvez modifier les points de début et de fin en appelant scrollRectToVisible:animation:. Mais je ne suis pas sûr si cela résout votre problème.
Utiliser l'extrait de code ci-dessous pour restaurer la position de défilement pour un UIScrollview
Déclarer "scrollPosition" variable comme CGPoint type.