0

J'ai un UIScrollView qui met à jour son cadre après chaque changement d'orientation de l'interface, en gardant sa hauteur mais en actualisant dynamiquement sa largeur pour toujours remplir la nouvelle largeur. Comme il s'agit d'une vue de défilement horizontale avec pagination activée, naturellement, je suis mise à jour son contenu en fonction de sa nouvelle taille. Je le fais comme suit (évidemment il est un code simplifié, mais vous devriez avoir l'idée):Conserver la position UIScrollView après changement d'orientation d'interface

scrollView.frame = CGRectMake(0.0f, 0.0f, window.size.width, 200.0f); 
// Content is being deleted here 
// Then redraw with the new width in mind 
scrollView.contentSize = (window.size.width * [database count]); 
[scrollView setContentOffset:CGPointMake(currentPostionX, 0.0f) animated:NO]; 

Cette méthode fonctionne très bien; le scrollview conserve sa position précédente après chaque changement d'orientation de l'interface. Mon problème est que ce n'est pas lisse. En fait, il est plutôt moche, ce qui entraîne souvent une "animation" sautillante, quand le contentOffset est en train d'être réinitialisé (et cela n'a pas d'importance si je mets 'animé' à YES).

Il doit y avoir une meilleure façon de faire cela et de faire en sorte que la vue de défilement garde sa position en fonction de ses nouvelles dimensions.

Des idées?

Mise à jour: En fait, j'appelle les méthodes ci-dessus dans la section animateAlongsideTransition de viewWillTransitionToSize, car cela crée une transition assez agréable lors d'un changement de taille. Si je les mets dans la section d'achèvement, tout vient juste "en place" après la rotation, ce qui est assez moche. De cette façon tout est lisse, sauf le saut à la bonne position à la toute fin.

+0

Comment avez-vous résolu votre problème? – SwiftArchitect

Répondre

0

Dans cette réponse, je suppose que votre déclaration:

... UIScrollView qui met à jour son cadre après chaque changement d'orientation de l'interface ...

signifie vraiment après chaque interface changement d'orientation.

Si oui, utilisez -viewWillTransitionToSize:withTransitionCoordinator: et consultez la documentation here.