2010-06-14 10 views
2

J'ai créé un UIViewController, qui génère par programme un UIScrollView. Tout va bien, mais quand je tourne le périphérique, le UIScollView devrait redimensionner ainsi il prend la largeur complète de ma vue.Autoresize UIScrollView

Y at-il un moyen de le faire sans avoir à reconstruire l'UIScrollView complet?

Merci beaucoup! Sebastian

Ceci est appelé dans mon viewDidLoad:

-(void)buildmyScroller { 
    myScroller = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 800, 768, 100)]; 


    //...adding some subviews to myScroller 


    thumbScroller.contentSize = CGSizeMake(3000, 100); 
    [[self view] addSubview:myScroller]; 
} 

Puis j'ai essayé de redimensionner myScroller avec cela, quand je setFrame, je l'ai dit myScroller ne répondrait pas à elle ...:

-(void)changemyScroller { 
     UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation; 
    if (interfaceOrientation == UIInterfaceOrientationPortrait) { 
     [thumbScroller setFrame:CGRectMake(0, 805, 768, 150)]; 
    } 
    else if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){ 
     thumbScroller.frame = CGRectMake(0, 805, 768, 150); 
    } 
    else if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft){ 
     thumbScroller.frame = CGRectMake(0, 549, 1024, 150); 
    } 
    else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight){ 
     thumbScroller.frame = CGRectMake(0, 549, 1024, 150); 
    } 
} 

Et appelé la méthode dans didAnimateFirstHalf ... parce que je ne suis pas shure où d'autre pour l'appeler.

Merci encore beaucoup!

Répondre

2

[scrollView setFrame: CGRectmake (x, y, largeur, hauteur)]; // Peut-être que vous devez faire la même chose pour le contenu de la scrollView pour l'adapter à votre disposition

devrait le faire. Vous pouvez envelopper dans un bloc UIAnimation s'il doit être une transition.

+0

Merci beaucoup! La solution peut être si facile :) – wolfrevo

+0

Encore une question, mon défilement correspond maintenant à ma mise en page et le contenu a aussi la bonne taille, mais quand je commence en paysage (scrollwidth 1024px) et fais pivoter zu portrait (scrollwidth 768px) je ne peux pas utiliser le scroller. Quand je commence en mode portrait et que je fais une rotation en paysage, je ne peux interagir que dans le premier 768px, donc à droite je ne peux pas interagir avec le défilement. quand je vais à une autre vue, je reviens à la vue qui contient la scrollview, je peux l'utiliser. Il n'est donc pas possible de changer le scrollView lorsqu'il est affiché? Ou où devrais-je le changer? THX. – wolfrevo

+0

Salut je suppose que vous configurez votre UIScrollView dans loadView ou viewDidLoad? Peut-être même init? (Cela signifie qu'il n'est mis à jour que lorsque ces fonctions sont appelées). Essayez de mettre l'instanciation de UIScrollView dans viewDidLoad, mais la configuration, la modification du contenu et l'orientation dans une fonction distincte. Vous pouvez maintenant appeler cette fonction à la fois depuis viewWillAppear et ShouldAutoRotate ... donc la configuration se produit à la fois lorsque vous le chargez la première fois, lorsque vous faites une rotation et quand vous passez à une autre vue et inversement. – RickiG

0

Essayez ceci:

if(self.rowNumber == 0){ 
    /******************* Scroller Setup *****************/ 
    // how many pages 
    int pageCount = 5; 
    //set up the scrollView 
    UIScrollView *scroller = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 768, 960)]; 
    // support for Landscape Orienation 
    if(UIInterfaceOrientationLandscapeLeft){ 
     [scroller setFrame:CGRectMake(0,0,1024, 704)]; 
    } 
    if(UIInterfaceOrientationLandscapeRight){ 
     [scroller setFrame:CGRectMake(0,0,1024, 704)]; 
    }