2010-09-11 6 views
1

J'essaie de comprendre comment placer une sous-vue à un UITableViewCell personnalisé avec une position centrée. Comme indiqué dans la documentation (Customizing Cells), il faut "... ajouter des sous-vues à la propriété contentView de l'objet de cellule ou ...". Comme je l'ai remarqué, cela fonctionne très bien avec UITableViewStylePlain. Dans les tables UITableViewStyleGrouped, les sous-vues ne peuvent pas être centrées. Ils sont décalés vers la droite.Centrage des sous-vues dans UITableViewCell dans TableView groupé

Si la sous-vue est directement ajoutée à UITableViewCell, cela convient aux deux modes. La même chose est vraie si je sous-classe UITableViewCell et charge la cellule à partir de XIB.

Malheureusement, je ne peux pas télécharger de captures d'écran. Quelqu'un peut-il aider à résoudre le problème? Ou est-ce que je manque quelque chose de vital, car le désalignement semble correspondre à la dimension à rétrécir dans une table groupée.

Un grand merci, El

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
static NSString *cellIdentifier1 = @"AddToCell"; 
static NSString *cellIdentifier2 = @"AddToContentView"; 
static NSString *aVeryLongLine = @"---------------------------------------------"; 
UITableViewCell *cell = nil; 
if (indexPath.section == 0) { 
    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier1]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
             reuseIdentifier:cellIdentifier1] autorelease]; 

     CGRect frame = cell.frame; 
     CGRect labelFrame = CGRectMake((frame.size.width-270)/2, (frame.size.height-40)/2, 270, 40); 
     UILabel *label = [[UILabel alloc] initWithFrame:labelFrame]; 
     label.textAlignment = UITextAlignmentCenter; 
     label.text = aVeryLongLine; 
     [cell addSubview:label]; 
     [label release]; 
    }  
} 
else if (indexPath.section == 1) { 
    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier2]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
             reuseIdentifier:cellIdentifier2] autorelease]; 

     CGRect frame = cell.contentView.frame; 
     CGRect labelFrame = CGRectMake((frame.size.width-270)/2, (frame.size.height-40)/2, 270, 40); 
     UILabel *label = [[UILabel alloc] initWithFrame:labelFrame]; 
     label.textAlignment = UITextAlignmentCenter; 
     label.text = aVeryLongLine; 
     [cell.contentView addSubview:label]; 
     [label release]; 
    }    
} 
else { 
} 

return cell; 

}

Répondre

0

Avez-vous vérifié la valeur du cadre, qui viennent de cell.contentView.frame ou cell.frame? Lorsque la cellule est initialisée avec le style et l'identité, elle peut avoir un CGZeroRect pour sa valeur d'image.

1

Les instances de UITableViewCell redimensionnent leurs vues de contenu dans un certain nombre de circonstances (par exemple, lors de l'ajout temporaire d'un bouton de suppression pour permettre à l'utilisateur de supprimer une ligne). Lorsque les cellules sont affichées dans une vue de tableau de styles groupée, elles sont redimensionnées pour fournir une marge entre les cellules et les bords gauche et droit de la vue de table. Donc, pour votre subviews de rester positionnés correctement, vous aurez besoin de mettre leurs masques Autoresizing correctement, quelque chose comme ceci: (. Ou

[mySubview setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | 
           UIViewAutoresizingFlexibleLeftMargin | 
           UIViewAutoresizingFlexibleRightMargin)]; 

pour les gens qui préfèrent l'ancienne syntaxe)

mySubview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; 

Questions connexes