这是我用来生成 UITableViewCell 的代码。我正在 iOS6/iOS7 中进行测试。如果我删除有关 UIImageView 的代码 UITableView 滚动就好了。但是使用 UIImageView 它会滞后和痉挛。我正在寻找一些解决方案来解决滞后问题。先感谢您。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"BubbleCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UILabel *label;
UIImageView *bubbleLeft;
UIImageView *bubbleRight;
if(cell == nil)
{
cell = [[
UITableViewCell
alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
label = [[UILabel alloc] init];
label.tag = 1;
NSString *fileLeft = [[NSBundle mainBundle] pathForResource:@"chatBubbleGray.png" ofType:nil];
NSString *fileRight = [[NSBundle mainBundle] pathForResource:@"chatBubbleBlue.png" ofType:nil];
UIImage
*bubbleImageLeft = [[
UIImage imageWithContentsOfFile:fileLeft] resizableImageWithCapInsets:UIEdgeInsetsMake(20, 22, 20, 22)];
UIImage
*bubbleImageRight = [[
UIImage imageWithContentsOfFile:fileRight] resizableImageWithCapInsets:UIEdgeInsetsMake(20, 22, 20, 22)];
bubbleLeft = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 10, 10)];
[bubbleLeft setImage:bubbleImageLeft];
bubbleLeft.tag=2;
bubbleRight = [[UIImageView alloc] initWithFrame:CGRectMake(320 - 20, 10, 10, 10)];
[bubbleRight setImage:bubbleImageRight];
bubbleRight.tag=3;
[cell addSubview:bubbleLeft];
[cell addSubview:bubbleRight];
[cell addSubview:label];
}else{
label = (UILabel *)[cell viewWithTag:1];
bubbleLeft = (UIImageView *)[cell viewWithTag:2];
bubbleRight = (UIImageView *)[cell viewWithTag:3];
}
// set frame to largest size you want
label.numberOfLines = 0;
label.
backgroundColor = [UIColor clearColor];
label.
text
= [[[
currentDictionary objectAtIndex:indexPath.row] objectForKey:@"string"] stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];
CGSize maximumLabelSize = CGSizeMake(296, FLT_MAX);
CGSize expectedLabelSize = [label.text sizeWithFont:label.font constrainedToSize:maximumLabelSize lineBreakMode:label.lineBreakMode];
if (indexPath.row%2==0) {
bubbleRight.hidden = YES;
bubbleLeft.hidden = NO;
bubbleLeft.frame = CGRectMake(10, 10, expectedLabelSize.width+20, expectedLabelSize.height+20);
label.frame = CGRectMake(
20, 20,
expectedLabelSize.width, expectedLabelSize.height);
}else{
bubbleLeft.hidden = YES;
bubbleRight.hidden = NO;
bubbleRight.frame = CGRectMake(320 - expectedLabelSize.width - 30, 10, expectedLabelSize.width+20, expectedLabelSize.height+20);
label.frame = CGRectMake(
320 - expectedLabelSize.width - 20, 20,
expectedLabelSize.width, expectedLabelSize.height);
}
// Configure the cell...
return cell;
}
编辑:
进一步查看代码表明,滞后实际上是由这段代码引起的:
bubbleLeft.frame = CGRectMake(10, 10, expectedLabelSize.width+20, expectedLabelSize.height+20);