7

(グループ化された!)がUITableViewあり、2つのスタイルのセルの高さを計算する必要があります:UITableViewCellStyleDefaultUITableViewCellStyleValue2

これは私がそれをする方法ですUITableViewCellStyleDefault

CGSize  textSize = {300.f, 200000.0f};
CGSize  size = [myTextString1 sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];
size.height += 30.0f;
result = MAX(size.height, 44.0f);

そしてのためにUITableViewCellStyleValue2

CGSize  textSize = {207.f, 200000.0f};
CGSize  size = [myTextString2 sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];
size.height += 30.0f;
result = MAX(size.height, 44.0f);

私の問題は、それらが間違った高さを返すことであり、それtextSizeは私が間違った数字を使用する場所だと思います。長いテキストの場合、下部が短くなり(通常は数語の行のみ)、両方のCellStyleで、セル内のテキストの上下に奇妙な間隔があります。

text.backgroundColorを赤にして、ボックスのサイズを計算することでUITableViewCellStyleValue2、幅のサイズ()を取得しました。の幅は、セルの大きさです。207.0f300.0fUITableViewCellStyleDefaultUITableViewStyleGrouped

NSStringのサイズを適切に計算し、それによってセルの適切な高さを取得するために使用する必要がある値を誰かが知っていますか?

ありがとう

4

6 に答える 6

9

これが私がこれに使用しているコードです。あるタイプの細胞にとっては魅力のように機能します。それはあなたのアプリケーションにとっていくつかの有用な部分を持っているかもしれません。

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath {
AppAppDelegate *appDelegate = (AppAppDelegate *)[[UIApplication sharedApplication] delegate];
NSString *Text = ([[appDelegate.myTextSectionsDelegateDict objectAtIndex:indexPath.section] objectForKey:@"Text"]);

    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:17.0];
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
    CGSize labelSize = [Text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
    return labelSize.height + 15;}
于 2009-07-24T22:18:56.443 に答える
2

セルを作成するとき、測定に使用するフォントと同じフォントを使用していますか?

私はこのページのチュートリアルを使用しましたが、すべてがうまくいきました。それはあなたにも役立つかもしれません:

于 2009-07-21T18:49:07.870 に答える
2

間違ったテキストサイズを使用していることがわかったようです。font後でこの問題を回避するために、ラベルのプロパティとプロパティを使用することをお勧めしlineBreakModeます。特に、後でセルでそれらを変更する場合はそうです。また、読みやすくするために、数値を返す前に高さを追加することは避けます。代わりに、次のようなものを試してみます。

CGSize textSize = CGSizeMake( 300.0, 1979 );
CGSize size = [ myTextString1 sizeWithFont:[[ cell textLabel ] font ]
                         constrainedToSize:textSize
                             lineBreakMode:[[ cell textLabel ] lineBreakMode ]];

result = MAX( size.height + 30, 44.0f );

ドキュメントによると、2009よりも大きい値を返す必要がないため、1979を使用しました。

于 2009-07-30T04:15:26.693 に答える
2

cellvalue2の高さを適切に計算する場合は、次を使用する必要があります。 [UIFont boldSystemFontOfSize:15.0f]改行モードとして:NSLineBreakByTruncatingTail

太字を使用しない場合、テキストは正しく入力されますが、正しい垂直方向のパディングは失われます。

残りの計算は正しいです。

于 2012-11-17T21:07:20.993 に答える
0

私のために働いているときは、テーブルビューの幅に基づいてconstraintSizeを計算することです:

CGSize constraintSize = CGSizeMake(tableView.frame.size.width * 0.6, 2009);
CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
于 2011-10-18T16:05:50.037 に答える
0

これを行う最も簡単な方法:

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

CGFloat result = 10.0f;
if(indexPath.section == 1) // here i compare the sections
{
    result = 400.0f;
}
return result;
}

あなたが持っているセクションに基づいて値を返します。これにより、カスタムの行の高さが得られます。

于 2012-01-11T00:52:36.590 に答える