2010-10-14 14 views
3

Cela me laisse perplexe. Je veux changer le cadre d'un UIScrollView lors du changement d'orientation:Pourquoi la modification du cadre d'un UIScrollView modifie-t-il les cadres de ses sous-vues?

if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight){ 

      self.myScrollView.frame = CGRectMake(40, 40, 984, 200); 
      for (UIView* view in [self.myScrollView subviews]){ 
       NSLog(@"subview x: %f", view.frame.origin.x); 
      } 

     } 
     else{ 

      self.myScrollView.frame = CGRectMake(40, 40, 728, 200); 
      for (UIView* view in [self.myScrollView subviews]){ 
       NSLog(@"subview x portrait: %f", view.frame.origin.x); 
      } 
     } 

Voici les résultats. Notez que les sous-vues sont tous déplacés 156 pixels vers la gauche, même si tout ce que je ne faisais que changer la largeur de la vue de défilement parent (256 px plus petit en mode portrait):

subview x: 0.000000 
    subview x: 128.000000 
    subview x: 256.000000 
    subview x: 384.000000 

    subview x portrait: -156.000000 
    subview x portrait: -28.000000 
    subview x portrait: 100.000000 
    subview x portrait: 228.000000 

Pourquoi ?? Et comment puis-je empêcher cela?

Répondre

11

Vous avez probablement les mauvais indicateurs autorisize définis dans les sous-vues. Vous pouvez également désactiver UIScrollView autoresizesSubviews (constructeur ininterface ou manuellement) pour désactiver tout ce comportement.

+0

myScrollView.autoresizesSubviews = NO; fait le tour. Merci. – sol

+0

aucun prob. Il y a aussi une case à cocher pour le désactiver dans le constructeur de l'interface – Nimrod

+0

+1 Excellent, j'avais un problème de sous-vues qui changeait mystérieusement quand un cadre de vue parents changeait, ça me rendait fou, éteindre autoresizesSubviews l'a corrigé, merci! – Bogatyr

0

peut-être régler cette aide chould?

myScrollview.resizesSubviews = NON;

ou si vous UIScrollView vous pouvez le sous-classement mettre en œuvre layoutSubviews pour personnaliser votre mise en page pour une certaine taille de trame;)