8

行の高さが異なる UITableView を作成したいのですが、UITableViewCells 内に UILabels を作成することでこれを達成しようとしています。

これまでの私のコードは次のとおりです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MyIdentifier = @"EntryCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
    }

    UILabel *textView = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 300, 40)];
    textView.numberOfLines = 0;
    textView.text = [entries objectAtIndex:[indexPath row]];
    [cell.contentView addSubview:textView];
    [textView release];

    return cell;
}

これにより、セルごとに 2 行のテキストが得られます。ただし、各「エントリ」の行数は異なるため、フォントサイズを変更せずに、必要に応じてテキストを折り返して、UITableViewCells のサイズを自動的に変更したいと考えています。

[textView sizeToFit]および/または[cell sizeToFit]機能していないようです。

UITableView の外観は次のとおりです。

----------------
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
Lorem ipsum
----------------
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
----------------

これを適切に行う方法を知っている人はいますか?

ありがとう。

4

3 に答える 3

11

UITableViewDelegate は、オプションのメソッド heightForRowAtIndexPath を定義しています。次に、sizeWithFont を使用する必要があります。

ここであなたの正確な問題についていくつかの議論があります:

http://www.v2ex.com/2008/09/18/how-to-make-uitableviewcell-have-variable-height/

テキストのサイズ変更もこのスレッドで議論されました

于 2008-09-24T16:53:06.297 に答える
1

このコードは私にとってはうまくいきます。完璧かどうかはわかりませんが、機能します。

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

    if(indexPath.row<[notesModel numberOfNotes]){
        NSString *cellText = [@"Your text..."];
        UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:12.0];
        CGSize constraintSize = CGSizeMake([UIScreen mainScreen].bounds.size.width - 100, MAXFLOAT);
        CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

        return labelSize.height + 20;
    }
    else {
        return 20;
    }
}
于 2010-03-01T19:07:54.877 に答える
-2

textView.numberOfLines = 2? numberOflines は行の最大数を設定するので、おそらく 2 行で済むでしょうか?

于 2008-12-10T21:43:04.690 に答える