2011-07-14 3 views
2

私はグループ化されたUITableViewを持っています。ラベルの高さに基づいて動的にUITableViewCellのサイズを変更するにはどうすればよいですか?

テーブルの行の高さをオーバーライドしていますが、最初の行のセルのラベルの高さのサイズに基づいて動的な高さを設定します。どうすればこの高さにすることができますか?

{ 
    CGFloat rowHeight = 0; 

    if(indexPath.section == kBioSection) { 
     switch(indexPath.row) { 
      case kBioSectionDescriptionRow:     
       rowHeight = 100; 
       break; 
      case kBioSectionLocationRow:      
       rowHeight = 44; 
       break; 
      case kBioSectionWebsiteRow:     
       rowHeight = 44; 
       break; 
     } 
    } 
    else { 
     rowHeight = 44; 
    } 

    return rowHeight; 
} 
+1

この仕事をしていますか?そうでない場合、何がうまくいかないのですか? – PengOne

+0

また、上記のコードを単一の 'if'ステートメントで実行できると思います。 – PengOne

答えて

2

NSStringのは、それはあなたにその文字列を描画するために必要なサイズを与えるUIStringDrawing.h

で宣言さ

- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode; 

と呼ばれる方法があります。

必要なサイズの高さを取得し、他のラベル/ビューやそれらの間のスペースなど、必要なものを追加して最終的な高さを計算することができます。このような

何か:

{ 
    CGFloat rowHeight = 0; 

    if(indexPath.section == kBioSection) { 
     switch(indexPath.row) { 
      case kBioSectionDescriptionRow:     
       CGSize labelSize = [descriptionText sizeWithFont:labelFont forWidth:tableView.frame.size.width - 20 lineBreakMode:UILineBreakModeWordWrap]; //Assuming 10 px on each side of the label 
       rowHeight = labelSize + 50; //Assuming there are 50 px of extra space on the label, besides the text 
       break; 
      case kBioSectionLocationRow:      
       rowHeight = 44; 
       break; 
      case kBioSectionWebsiteRow:     
       rowHeight = 44; 
       break; 
     } 
    } 
    else { 
     rowHeight = 44; 
    } 

    return rowHeight; 
} 
+0

私のテーブルビューがクラッシュするようです。私は問題の原因と思われるセルのdetailTextLabelをつかんでいます。 –

+0

なぜクラッシュするのですか?あなたは何のセルのdetailTextLabelをつかんでいますか? – EmilioPelaez

+0

私はdetailTextLabelの高さに基づいてセル行の高さのサイズを変更したいからです。 –

1

あなたがセルに

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) 
{ 
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap; 
cell.textLabel.numberOfLines = 0; 
cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:15.0]; 
} 

セットの高さを使用することができます

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSString *cellText = @"Go get some text for your cell."; 
UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:15.0]; 
CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT); 
CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap]; 

return labelSize.height + 20;//set as per your need 
} 
+0

この方法はiOS 5では動作しません –

関連する問題