2010-07-02 4 views
0

juste une question rapide. Existe-t-il un moyen SIMPLE de définir dynamiquement la hauteur de la cellule en fonction du texte contenu dans les cellules? Scénario: Vue de table groupée avec deux sections. les sections un et deux contiennent du texte d'une base de données (avec différentes longueurs de texte). J'ai regardé quelques tutoriels et extraits de code mais rien ne semble être d'aucune aide pour moi (ou je suis trop épais pour le faire correctement).UITableView avec des hauteurs de cellule dynamiques

J'apprécierais quelques conseils ou un lien vers un tutoriel ou encore mieux quelques idées de codage!

merci!

+0

quelqu'un? Aucune suggestion? – treasure

Répondre

3

Ok voici la réponse: (bien non complété cependant) J'ai un problème avec le et j'apprécierais de l'aide car il me rend fou! (Je reçois un avertissement: le contrôle atteint la fin de la fonction non-vide)

Quelqu'un peut-il aider ici?

voici le code!

#pragma mark - 
#pragma mark UITableViewDelegate methods 
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 



    UITableViewCell *cell = [self newOrReusableCell]; 

    if (indexPath.section == A_SECTION) { 

    NSUInteger row = indexPath.row; 
    NSString *text = [_centerArray objectAtIndex:row]; 
    UILineBreakMode lineBreakMode = cell.textLabel.lineBreakMode; 

    CGFloat width = _tableView.contentSize.width - (kTableCellHPadding*2 + tableCellMargin*2); 
    UIFont* font = cell.textLabel.font; 
    CGSize size = [text sizeWithFont:font 
        constrainedToSize:CGSizeMake(width, CGFLOAT_MAX) 
         lineBreakMode:lineBreakMode]; 

    if (size.height > kMaxLabelHeight) { 
     size.height = kMaxLabelHeight; 
    } 

     return size.height + kTableCellVPadding*2; 
} 


    if (indexPath.section == B_SECTION) { 

     NSUInteger row = indexPath.row; 
     NSString *text = [_leftArray objectAtIndex:row]; 
     UILineBreakMode lineBreakMode = cell.textLabel.lineBreakMode; 

     CGFloat width = _tableView.contentSize.width - (kTableCellHPadding*2 + tableCellMargin*2); 
     UIFont* font = cell.textLabel.font; 
     CGSize size = [text sizeWithFont:font 
         constrainedToSize:CGSizeMake(width, CGFLOAT_MAX) 
          lineBreakMode:lineBreakMode]; 

     if (size.height > kMaxLabelHeight) { 
      size.height = kMaxLabelHeight; 
     } 

    return size.height + kTableCellVPadding*2; 
} 
}//i get the WARNING here!! 
+0

Vous obtenez un avertissement parce que vous avez 2 instructions if avec des retours en eux, et rien après. Si les deux instructions if sont fausses pour une raison quelconque, vous n'aurez aucun retour. Vous pouvez corriger cet avertissement en mettant un retour en bas de la méthode avant la dernière}, même si c'est juste retourner 0.0; –

Questions connexes