2010-06-29 3 views
1

J'ai un tas de 'Rowviews' que je veux mettre dans une vue défilement vertical. J'ai créé cette vue rowView en tant que plume distincte dans IB. Ils sont dimensionnés à 1024/200 (ipad). Maintenant, je veux les mettre un par un dans mon parent UIScrollView. J'ai essayé un simple [vScroll addSubview: rowView] mais cela les met au dessus l'un de l'autre (j'ai rendu la rowview transparente pour vérifier cela). Alors j'ai commencé à tromper avec les limites de chaque rowview en vain. C'est mon code. Note « self.yExtentSoFar » est initialisée à 0. Imaginez le code ci-dessous appelée pour chaque ligne:UIView setBounds UIScrollView hell!

  MyRowView *rowView = [[MyRowView alloc] init]; 

    float calculatedWidth = 0; 
    // minus nav bar 
    float calculatedHeight = 0; 
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    UIInterfaceOrientation orientation = [UIDevice currentDevice].orientation; 
    if (orientation == UIInterfaceOrientationPortrait){ 
     // iPad 
     calculatedWidth = 768.0; 
     calculatedHeight = 960.0; 
    }else{ 
     // iPad 
     calculatedWidth = 1024.0; 
     calculatedHeight = 704.0; 
    } 

    [self.vScroll addSubview: rowView.view]; 
    [rowView.view setBounds:CGRectMake(0, self.yExtentSoFar, calculatedWidth,200)]; 
    [self.vScroll setContentSize:CGSizeMake(calculatedWidth, yExtentSoFar+200)]; 
    self.yExtentSoFar += 200; 

Alors avant que j'ai essayé paramètres limite le rowviews est apparu overtop les uns des autres. Compréhensible je suppose. Quand je définis les limites, la vue de la 2ème rangée n'est pas apparue sous la 1ère comme prévu, à la place je dois baisser le vScroll et le 2ème est apparu AU-DESSUS du premier écran éteint!

Quelqu'un pourrait-il indiquer où je me trompe? Merci beaucoup,

Mike

+0

Juste une pensée, x et y sont 0,0 dans le coin gauche en haut à droite? –

+0

sur l'iPhone pour les vues, oui. –

+0

Ok, eh bien, pourquoi une valeur y de 200 le mettrait-il en négatif? –

Répondre

3

Vous souhaitez mettre en forme vos sous-vues en définissant leur frame. Plus précisément, vous confondez les coordonnées de référence. Les bornes font référence à la quantité de cette vue à afficher. Alors que le cadre est où (& quelle taille) la vue doit être placée dans son aperçu.

Voir « La relation du cadre, Bounds et Centre » View Programming Guide for iPhone

+0

Parfait !!! Thankyou :) –

+0

Aussi, lorsque je travaille avec une collection de vues dans un 'UIScrollView', je les garde dans une vue de conteneur. Cela aide lorsque j'ai besoin de parcourir les sous-vues "défilées" pour travailler avec eux. Si vous comptez sur myScrollView.subviews, les vues des indicateurs de la barre de défilement seront incluses! (la vue container est ma seule sous-vue de 'myScrollView') – ohhorob

2

Vous le faites mal ;-) Ce que vous avez expliqué ici est plus ou moins une nouvelle mise en œuvre de ce que vous obtenez l'aide d'un UITableView. Use a UITableView et une cellule de vue de table personnalisée. Il facilitera votre vie beaucoup.

+0

L'utilisation d'une vue UITableCell personnalisée semble plus complexe. Je veux juste jeter mes vues dans un UIScrollView. Pourquoi apparaissent-ils l'un sur l'autre (hors de l'écran) plutôt que l'un en dessous de l'autre? Je ne peux pas imaginer chaque fois qu'une situation de défilement vertical est nécessaire, les gens utilisent un UITable. –

+0

Pour ne pas être sarcastique, mais en fait, que vous puissiez l'imaginer ou non, les gens utilisent très souvent UITableViews. Selon votre description dans votre question, c'est exactement ce dont vous avez besoin. Apprenez à utiliser les vues de table. Comme je l'ai déjà dit, cela rendra votre vie beaucoup plus facile. Croyez-moi. ;-) –

+0

Tout d'abord merci pour votre réponse. J'ai juste le sentiment que réutiliser un composant existant n'est utile que si vous obtenez gratuitement des fonctionnalités que vous auriez sinon à créer. Une fois que j'implémenterais toutes les méthodes déléguées et les trucs pour les tables et que je ferais l'imbécile avec des vues de cellules de table personnalisées, j'aurais pu écrire les 3 lignes pour un vScrollView. Je voulais juste savoir par intérêt ce qui n'allait pas avec mon truc. @ohhorob a répondu que pour moi. Merci pour votre réponse si! Je vais les essayer la prochaine fois. –