2010-09-17 7 views
14

Est-il possible de modifier la hauteur d'une seule cellule dans une vue groupée?
J'ai une vue de table avec 2 sections de 3 et 2 rangées ... Je voudrais changer la hauteur de la rangée de la deuxième rangée de la deuxième section ...tableView hauteur de la cellule ... comment le personnaliser?

Comment est-ce que je peux faire ceci?
Merci!

Répondre

51

Vous pouvez regarder cette méthode:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

Dans votre cas, le code devrait ressembler à:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.section == 1 && indexPath.row == 1) { 
     return SPECIAL_HEIGHT; 
    } 
    return NORMAL_HEIGHT; 
} 

Vous pouvez chercher plus de détails sur les the method here

+0

Ok merci! Mais j'ai un problème ... Si je tape un nombre comme return 60.0; fonctionne beaucoup mais si je tape du code pour retourner la hauteur en fonction d'un texte UILabel, l'arrière-plan de la cellule n'apparaît pas ... J'ai ajouté ce code dans la méthode cellForRowAtIndexPath: – matteodv

+0

else if (indexPath.section == 1 && indexPath.row == 1) { \t \t descrizioneLabel = [[UILabel alloc] initWithFrame: CGRectMake (10, 5, 285, 50)]; \t \t descrizioneLabel.font = [UIFont boldSystemFontOfSize: 14.0]; \t \t descrizioneLabel.backgroundColor = [UIColor clearColor]; \t \t descrizioneLabel.numberOfLines = 0; \t \t descrizioneLabel.text = souhait.descrizione; \t \t [cell.contentView addSubview: descrizioneLabel]; \t} – matteodv

+0

et c'est la méthode affiché par vous: - (CGFloat) tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath { \t \t if (indexPath.section == 1 && indexPath.row == 1) { \t \t NSString * test = descrizioneLabel.text; \t \t UIFont * cellFont = [UIFont boldSystemFontOfSize: 14.0]; \t \t CGSize constraintSize = CGSizeMake (280,0, MAXFLOAT); \t \t CGSize labelSize = [testo sizeWithFont: cellFont constrainedToSize: constraintSize lineBreakMode: UILineBreakModeWordWrap]; \t \t \t \t labelSize.height de retour; \t} \t \t retour 44,0; } – matteodv

0

Jetez un oeil à

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

Pour la indexPath juste vérifier quelle ligne et section et ajuster la hauteur en conséquence

3

En iOS 8 et ci-dessus, nous pouvons utiliser le Dynamic Table View Cell Hauteur.

Cette fonction UITableviewCell obtenir sa hauteur de son contenu et on n'a pas besoin d'écrire heightForRowAtIndexPath

Tout ce que je dois faire dans viewDidLoad()

tableView.estimatedRowHeight = 44.0; 
tableView.rowHeight = UITableViewAutomaticDimension; 

Si cell contient uilabel. puis appliquer des contraintes à uilabel

enter image description here

Assurez-vous de changer l'étiquette --Lines-- à 0

enter image description here

La cellule se développera automatiquement le contenu de uilabel:

enter image description here

Questions connexes