0

UITableViewセルをテキストに合わせようとしています。これまでのところ、私はこのようなものを持っています:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UILabel *label = nil;

    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault)
            reuseIdentifier:@"business"];

    NSString *comment = [[items_array objectAtIndex:[indexPath row]] objectForKey:(@"comment")];

cell.textLabel.numberOfLines = 0;
        cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;

        CGSize constraint = CGSizeMake(320 - (10 * 2), 20000.0f);

        CGSize size = [comment sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];


        label = [[UILabel alloc] initWithFrame:CGRectZero];

        [label setText:comment];
        [label setFrame:CGRectMake(10, 10, 320 - (10 * 2), MAX(size.height, 44.0f))];

        cell.textLabel.text = comment;  
    }

私もこの機能を持っています

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{    
    NSString *comment = [[items_array objectAtIndex:[indexPath row]] objectForKey:(@"comment")];

    CGSize constraint = CGSizeMake(320 - (10 * 2), 20000.0f);

    CGSize size = [comment sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

    CGFloat height = MAX(size.height, 44.0f);

    return height + (10 * 2);
}

ただし、UITableViewsのセルに適切な高さを割り当てていません。セルのラベルとテキストを割り当てる方法/場所に誤りがあると思います。

それがどうあるべきかを理解するのを手伝ってください。

ありがとう!

4

2 に答える 2

1

を使用してセルの高さを設定する必要があります-tableView:heightForRowAtIndexPath


新しいコードが投稿されました

これが私がそれをした方法です(私はプロトタイプセルを使用したので、物事はあなたのために異なるかもしれません)。

セルの自動サイズ設定を、ラベルの高さを自動サイズ設定するように設定しました(これは、textLabelにすでに設定されている可能性があります)。

それから-tableView:heightForRowAtIndexPath私は次のことをしました:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{    
    CGSize size = CGSizeMake(WIDTH_OF_PROTOTYPE_LABEL, CGFLOAT_MAX);
    size = [TEXT_AT_INDEX_PATH sizeWithFont:FONT_OF_PROTOTYPE_LABEL constrainedToSize:size lineBreakMode:UILineBreakModeWordWrap];

    CGFloat height = size.height + (HEIGHT_OF_PROTOTYPE_CELL - HEIGHT_OF_PROTOTYPE_LABEL);
    return MAX(height, HEIGHT_OF_PROTOTYPE_CELL);
}

アップデート2

コードをもう一度見てみると、2つの問題が考えられます。1)textLabelの幅が間違っています。2)最終的な新しい高さを計算した後、最後にdoMAXを計算する必要があります。

于 2012-08-07T18:24:06.673 に答える
1

これはあなたを近づけますか?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"business"]; 

 if (cell == nil)
 {  
  cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault)reuseIdentifier:@"business"]; 
 }

 NSString *comment = [[items_array objectAtIndex:[indexPath row]] objectForKey:(@"comment")]; 

 CGSize constraint = CGSizeMake(320 - (10 * 2), 20000.0f); 

 CGSize size = [comment sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; 

 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, MAX(size.height, 44.0f) + 20.0f)]; 
 label.numberOfLines = 0; 
 label.lineBreakMode = UILineBreakModeWordWrap; 
 label.text = comment;  

 [cell.contentView addSubview:label]; 

} 
于 2012-08-07T18:46:15.713 に答える