Вот код, который я использую для создания UITableViewCell. Я тестирую iOS6/iOS7. Если я удалю код о UIImageView, свитки UITableView просто прекрасны. Но с UIImageView это отставание и спазмы. Я ищу какое-то решение для исправления отставания. Заранее спасибо.Использование UIImageView с [UIImage resizableImageWithCapInsets] в UITableView вызывает lag
- (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;
}
EDIT:
Далее обзор кода показал, что отстающий на самом деле вызваны этот кусок кода: bubbleLeft.frame = CGRectMake(10, 10, expectedLabelSize.width+20, expectedLabelSize.height+20);
Итак, каковы были значения UIEdgeInset, которые вы использовали для этого? –
это было бы 17,23,17,23 –
@Omer .. Спасибо ... –