Pb ajout de subviews à un scrollview

Christophe Durandeau

Membre enregistré
21 Octobre 2011
4
0
Bonjour,
J'essaye de coder un petit test de navigation entre différentes vues via un scrollView (sur iphone).
J'ajoute de nouvelles vue très simples composées d'un rectangle de couleur.
Le problème est que je ne vois pas mes subviews, la cause est (je pense) que la taille de mon scrollView est à zéro (je fais afficher sa largeur via une NSLog et c'est à zéro).
Pourtant dans InterfaceBuilder j'ai bien une dimension de 340x518...
Pou tester, dans IB j'ai mis une couleur orange sur mon scrollView, en lançant l'appli je vois bien mon rectangle orange donc la dimension est bonne, mais je récupère toujours la dimension à zéro dans le code.
Grrrrr.
Je galère sur ce problème depuis plusieurs heures sans trouver de solution.
Quelqu'un aurait une idée ?
Je vous remercie par avance...


Bloc de code:
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], nil];
    NSLog(@"Frame width: %f", self.scrollView.frame.size.width);
    for (int i = 0; i < colors.count; i++) {
        CGRect frame;
        NSLog(@"Adding frame %d", i);
        frame.origin.x = self.scrollView.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = self.scrollView.frame.size;
        
        UIView *subview = [[UIView alloc] initWithFrame:frame];
        subview.backgroundColor = [colors objectAtIndex:i];
        [self.scrollView addSubview:subview];
    }
    
    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * colors.count, self.scrollView.frame.size.height);
    NSLog(@"Content size: %f %f", self.scrollView.contentSize.width, self.scrollView.contentSize.height);
}
 
Dernière édition par un modérateur:
Hello,

j'ai créé un projet rapidement pour tester et ton code fonctionne.

Ma question va peut-être paraître stupide mais... tu es sûr d'avoir bien déclaré ta UIScrollView comme IBOutlet dans ton header et de l'avoir linké dans le xib ?

Si tu fais un

Bloc de code:
[self.scrollView setBackgroundColor:[UIColor redColor]];

directement dans le code, ça change bien le fond orange en rouge ?
 
Merci pour ta réponse, mais tout était bon dans le storyboard.
J'avais simplement la frame de ma scrollview qui avait une dimension nulle. Pourquoi ? je ne sais pas. Pourtant tout semble ok du coté du storyboard, je suis bien en scaleToFill sur la view...
J'ai résolu le problème en forçant la taille de la frame en début de méthode. Pas propre mais je peux continuer mon tuto.


CGRect scrollFrame = CGRectMake(0, 0, 340, 518);
self.scrollView.frame = scrollFrame;
 
Ok, je connais pas trop le fonctionnement des storyboards et ce que ça implique donc je vois pas vraiment où pourrait être le problème, mais c'est à creuser quand même.

Tant mieux si tu as réussi à t'en sortir ! ;)

Bloc de code:
CGRect scrollFrame = CGRectMake(0, 0, 340, 518);
self.scrollView.frame = scrollFrame;

(Pourquoi écrire 2 lignes de code quand on peut en écrire une seule ? :p)
 
Salut

Je suis un peu hors sujet, mais clairement, quel est l'intérêt d'avoir un storyboard à la place de vues séparées ?

Pour moi, je trouve que l'utilisation de vues séparées est bien plus simple, en plus, travaillant sur un mac book pro 13" c'est bien plus clair.
 
Apparemment y a pas mal d'avantages à ça, le premier étant que tu as une vue claire sur l'ensemble de la hiérarchie de tes écrans, de plus l'utilisation des storyboards n'exclut pas l'utilisation de xib à côté.
Perso je continue à bosser uniquement avec des xib, mais c'est parce que j'ai appris comme ça... de même que je fais de la résistance en continuant de gérer la mémoire manuellement, alors que ARC est à priori au moins aussi performant.
 
Merci, à force de voir pas mal de tuto expliquant avec des storyboards, je commençais à penser que j'étais le seul à résister :p

Mais j'ai accepté ARC
 
Moi, c'est l'inverse.
Je me suis mis au Storyboard (quand l'application commence à devenir un peu complexe afin d'avoir une vue d'ensemble sur la hiérarchie et l'enchaînement des vues), mais pas d'ARC encore...