如果我在表格单元格中写两行以上,我想使imageview成为可伸缩的。但是我遇到了如下问题:
我的细胞代码如下:
- (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图像。
答案 0 :(得分:0)
问题在于,每次重复使用时,都会不断向细胞添加新的子视图。而不只是做:
[cell addSubview:self.bubbleImage];
尝试:
[cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
[cell.contentView addSubview:self.bubbleImage];
更好的选择是在创建单元格时为UIImageView
创建单个bubbleImage
并设置其自动调整遮罩。然后,当调整单元格大小时,图像将自动适当更改...