2012-01-23 4 views
1

J'ai un UIScrollView qui contient un tas de sous-vues. Si la vue est initialement chargée en mode paysage ou portrait, la disposition de chacun est correcte. Cependant, quand j'essaie de gérer les changements d'orientation, rien ne se passe.UIScrollView ne pas mettre à jour

Ce que je crois être le problème est que les cadres de sous-vues sont mis à jour, mais pas redessiné.

Je me sers de ce que maintenant pour définir les cadres sur un changement d'orientation:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation  duration:(NSTimeInterval)duration { 
    int i = 0; 
    for(UIView *subview in [scroll subviews]) { 
     if([subview isKindOfClass:[GalleryThumbContainerView class]]) { 
      [subview setFrame:[self getFrameLandscape:i]]; 
      i++; 
     } else { 
     } 
    } 
} 

Si l'appareil est en mode portrait et je tourne à aucun paysage des subviews nouveaux cadres sont mis à jour.

Si je garde l'appareil en mode portrait et que je quitte la vue, tous les nouveaux cadres sont mis à jour.

Cela me porte à croire que c'est un problème avec l'ensemble n'étant pas mis à jour. J'ai essayé:

[self.view setNeedsDisplay]; 
[self.view setNeedsLayout]; 
[self.scroll setNeedsDisplay]; 
[self.scroll setNeedsLayout]; 

Aucune ne fonctionne.

j'ai réussi à « faire » fonctionner par:

  1. Suppression de tous les sous-vues du ScrollView
  2. Régler tous les sous-vues nouveau cadre
  3. Re-Ajout tous les sous-vues en arrière le ScrollView

Il semble y avoir une façon beaucoup plus propre de faire cela.

J'ai également essayé d'ajouter un écouteur de changement d'orientation à ma sous-classe de sous-vues (bouche pleine), et de stocker chaque sous-vues paysage et portrait. Puis passer par l'auditeur. Ce qui n'a pas fonctionné non plus.

Toute aide est très appréciée et merci de votre temps.

+0

Qu'en est-il mettre tous le mode contenu de vues à UIViewContentModeRedraw? http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html –

+0

Redimensionnez-vous également le ScrollView sur le changement d'InterfaceOrientation? – alex

+0

@alex Oui, je suis. – random

Répondre

0

pour (UIView * vue en scrollView.subviews)

{ 
    if ([view isKindOfClass:[UIImageView class]]) 
    { 
     [view removeFromSuperview]; 
    } 
}