0

テーブルセルに2行以上書き込むと、イメージビューを伸縮可能にしたい。しかし、私は以下のような問題を抱えています:

セルの私のコードは次のとおりです。

   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   chatCell *cell = (chatCell *)[tableView dequeueReusableCellWithIdentifier:CHAT_CELL_IDENTIFIER];
   NSUInteger row = indexPath.row;
   if (row < chatData.count)
   {

    NSString *chatText = [[chatData objectAtIndex:row] objectForKey:TEXT];
    cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
    UIFont *font = [UIFont systemFontOfSize:14];
    CGSize size = [chatText sizeWithFont:font constrainedToSize:CGSizeMake(150.0f, 1000.0f) lineBreakMode:NSLineBreakByCharWrapping];
    cell.textString.frame = CGRectMake(75, 18, size.width +20, size.height + 20); // set text frame
    cell.textString.font = [UIFont fontWithName:FONT_NAME size:FONT_SIZE];        // set text font
    cell.textString.text = chatText;                                              // set text
    [cell.textString sizeToFit];

    NSDate *theDate = [[chatData objectAtIndex:row] objectForKey:DATE];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:DATE_FORMAT];
    NSString *timeString = [formatter stringFromDate:theDate];
    cell.timeLabel.text = timeString;                                       // set timeLabel to display date and time
    cell.userLabel.text = [[chatData objectAtIndex:row] objectForKey:NAME]; // set userLabel to display userName

    self.bubbleImage = [[UIImageView alloc] init];
    self.bubbleImage.frame = CGRectMake(0,22,250,CGRectGetMaxY(cell.textString.frame)+10.0);
    self.bubbleImage.image = [[UIImage imageNamed:@"bubbleMine.png"] stretchableImageWithLeftCapWidth:21 topCapHeight:14];

    [self.bubbleImage addSubview:cell.userLabel];
    [self.bubbleImage addSubview:cell.timeLabel];
    [self.bubbleImage addSubview:cell.textString];

    [cell addSubview:self.bubbleImage];
        }
return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
 NSString *cellText = [[chatData objectAtIndex:indexPath.row] objectForKey:TEXT];
//calculate height for each row based on the textString
UIFont *font = [UIFont fontWithName:FONT_NAME size:FONT_SIZE];
CGSize size1 = [cellText sizeWithFont:font constrainedToSize:CGSizeMake(150.0f, 1000.0f) lineBreakMode:NSLineBreakByCharWrapping];
return size1.height+100.0; //or whatever padding value you need
}

これには問題があります:

CGRectGetMaxY(cell.textString.frame)+10.0 

以下のように並んでいます:

self.bubbleImage.frame = CGRectMake(0,22,250,CGRectGetMaxY(cell.textString.frame)+10.0); 

単一セルの 2/3 画像を取得しているためです。

4

1 に答える 1

0

問題は、再利用するたびに新しいサブビューをセルに追加し続けることです。ただ行う代わりに:

[cell addSubview:self.bubbleImage];

試す:

[cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
[cell.contentView addSubview:self.bubbleImage];

より良い代替手段は、セルが作成されたときにシングルUIImageViewを作成bubbleImageし、その自動サイズ変更マスクを設定することです。次に、セルのサイズが変更されると、画像が自動的に適切に変更されます...

于 2013-05-31T07:15:37.610 に答える