これは iPhone 0S 2.0 に関するものです。2.1 の回答でも問題ありませんが、テーブルに関する違いはわかりません。
UITableViewCell
にはデフォルトでが含まれているため、カスタム セルを作成しなくてもテキストを折り返すことは可能と思われます。カスタム セルを作成UILabel
すれば機能することはわかっていますが、私が実現しようとしているのはそれではありません。現在のアプローチが機能しない理由を理解したいのです。
ラベルはオンデマンドで作成されることがわかりました (セルはテキストと画像へのアクセスをサポートしているため、必要になるまでデータ ビューは作成されません)。そのため、次のようにします。
cell.text = @""; // create the label
UILabel* label = (UILabel*)[[cell.contentView subviews] objectAtIndex:0];
有効なラベルが表示されますが、numberOfLines
それ (および lineBreakMode) の設定は機能しません。依然として 1 行のテキストが表示されます。 にはUILabel
テキストを表示するのに十分な高さがあります。 の高さに対して大きな値を返しているだけですheightForRowAtIndexPath
。
ベストアンサー1
これはもっと簡単な方法ですが、私にとってはうまくいきました。
関数内cellForRowAtIndexPath:
。セルを初めて作成するとき:
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:17.0];
}
ラベルの行数を 0 に設定していることに気付くでしょう。これにより、必要な行数だけ使用できるようになります。
次の部分は、ウィルの大きさを指定することです。関数UITableViewCell
内でそれを行いますheightForRowAtIndexPath
。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellText = @"Go get some text for your cell.";
UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:17.0];
CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
return labelSize.height + 20;
}
テキストの周囲に少しバッファを残したいので、返されたセルの高さに 20 を追加しました。