2010-10-14 7 views
3

Je souhaite ajuster la hauteur d'une cellule en fonction de son contenu. Je sais UITableViewDelegate vous permet de mettre en œuvre laAjuster automatiquement la hauteur UITableViewCell en fonction de son contenu

- (CGFloat) tableView: (UITableView *) tableView 
       heightForRowAtIndexPath: (NSIndexPath *) indexPath { 
    return someHeight; 
} 

mais je ne veux pas hardcode la hauteur. Y a-t-il un moyen de le faire dynamiquement?

+0

Bien sûr, il y a. Mais comment le faire dépend fortement de ce que vous voulez faire. Si vous voulez changer la hauteur de la cellule en fonction d'une image, c'est assez simple, si vous voulez que la hauteur de la cellule dépende des retours à la ligne dans une chaîne, il y a plus de calculs. Alors qu'essayez-vous de faire? –

+0

Eh bien, j'ai une cellule personnalisée, qui prend en UILabel ou un UIImageView. Comme vous l'avez dit, ajuster la hauteur en fonction de la hauteur de l'image est assez trivial. Mais comment puis-je savoir de combien d'espace UILabel a besoin? –

Répondre

2

Vous devez entrer du code dans cette méthode qui calcule la hauteur du contenu de la ligne. Le code exact que vous devez mettre dépend entièrement du type de contenu que vous affichez. Par exemple, si vous affichez du contenu textuel qui peut recouvrir plusieurs lignes, vous finirez probablement par utiliser l'une des méthodes de la famille sizeWithFont: de NSString.

+0

Merci! Cela a fait l'affaire. –

1

Si vous souhaitez que vos lignes aient des hauteurs différentes, vous devez calculer la hauteur de chaque ligne.

J'ai rencontré un tel problème. J'ai calculé les hauteurs des rangées en fonction du contenu analysé à partir d'une chaîne JSON. voici ce que j'ai fait.

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

    // parse json 
    id qWeiboContent = [self.array objectAtIndex:indexPath.row]; 

    float totalContentHeight; 
    QWeiboContentModel *model = [self getQWeiboContentFromJSON:qWeiboContent]; 
    QWeiboContentModel *subModel = nil; 

    totalContentHeight += model.forOrComment.heightValue; // comment text view's height 
    totalContentHeight += model.content.heightValue;  // content text view's height 
    totalContentHeight += 21 * 2;       // 21 is height of a label 
    totalContentHeight += model.imageUrl.heightValue; 
    totalContentHeight += CELL_CONTENT_MARGIN; 

    if ([model.type isEqualToString:REPOSTED]) { 

     id qWeiboSource = [qWeiboContent objectForKey:@"source"]; 
     subModel = [self getQWeiboContentFromJSON:qWeiboSource]; 
     model.source = subModel; 

     totalContentHeight += subModel.forOrComment.heightValue;  
     totalContentHeight += subModel.content.heightValue;   
     totalContentHeight += 21 * 2;        
     totalContentHeight += subModel.imageUrl.heightValue; 
     totalContentHeight += CELL_CONTENT_MARGIN; 
    } 

    if (self.arrayQQWeibo == nil) { 

     self.arrayQQWeibo = [[NSMutableArray alloc]init]; 
    } 
    [self.arrayQQWeibo addObject:model]; 

    return totalContentHeight; 
} 
Questions connexes