J'ai une fonction de chat dans l'application que je fais. Chaque cellule a un UITextView
et j'ai besoin de calculer le **height and width**
de chaque cellule. Je fais cela et puis cache ces données. Utilisation de NSLog J'ai déterminé que les données sont correctement mises en cache et que la hauteur de chaque ligne n'est demandée qu'une seule fois.UITableView retardé lors du défilement pour le chat comme l'application
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
Message *message = [feedItems objectAtIndex:indexPath.row];
NSString *reuseIdentifier;
if (message.iSentThisMessage) {
reuseIdentifier = @"MeCell";
} else {
reuseIdentifier = @"HostCell";
}
ChatTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath];
// Configure the cell...
cell.textView.text = message.content;
if (message.frame.size.height == 0 && message.frame.size.width == 0) {
CGRect rect = cell.textView.frame;
rect.origin.x = 5;
rect.origin.y = 3;
CGSize size = [self text:message.content
sizeWithFont:[UIFont systemFontOfSize:17.0]
constrainedToSize:CGSizeMake(225.0, CGFLOAT_MAX)];
rect.size.height = size.height
+ cell.textView.textContainerInset.bottom
+ cell.textView.textContainerInset.top;
rect.size.width = [cell.textView sizeThatFits:CGSizeMake(225.0, rect.size.height)].width
+ cell.textView.textContainerInset.left
+ cell.textView.textContainerInset.right;
if (message.iSentThisMessage) {
rect.origin.x = 320 - (rect.origin.y + rect.size.width);
}
cell.textView.frame = rect;
message.frame = rect;
NSLog(@"Not Cached :(");
} else {
cell.textView.frame = message.frame;
NSLog(@"Cached!");
}
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
Message *message = [feedItems objectAtIndex:indexPath.row];
CGSize size = [self text:message.content
sizeWithFont:[UIFont systemFontOfSize:17.0]
constrainedToSize:CGSizeMake(225.0, CGFLOAT_MAX)];
if (indexPath.row + 1 == feedItems.count)
size.height += 4;
NSLog(@"Height asked for.");
return size.height + 12;
}
En outre, une autre possibilité peut-être que je suis Redéfinition de la méthode suivante dans ma classe personnalisée uitableviewcell
parce que sinon il réorganise le contenu de ma cellule.
- (void) layoutSublayersOfLayer:(CALayer *)layer {
}
Je n'arrive pas à comprendre comment le faire ne pas lag !!
Sortez la logique de dimensionnement de 'cellForRowAtIndexPath'. Vous ne devriez pas en avoir besoin ici. – CrimsonChris