layoutSubviews llamado dos veces en UITableViewCell

Estoy reemplazando layoutSubviews en mi subclass de UITableViewCell. Noté que layoutSubviews se llama dos veces para cada celda. En la segunda llamada, la altura del marco de la vista de contenido es 1 less que la altura de la primera llamada:

@implementation MyUITableViewCellCell + (NSString *)asString:(CGRect) rect { NSString *res = [[NSString alloc] initWithFormat:@"[%f %f %f %f]", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height]; [res autorelease]; return res; } - (void)layoutSubviews { [super layoutSubviews]; NSLog(@"Here I am %@ frame=%@ cvframe=%@, self.text, [MyUITableViewCellCell asString:self.frame], [MyUITableViewCellCell asString:self.contentView.frame]); } @end 

Así es como el controller crea las celdas de la tabla:

 - (NSString*)dataAtIndex:(NSInteger)index { NSString* data = [[NSString alloc] initWithFormat:@"Row %d", index]; return [data autorelease]; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 30; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Alex"; NSInteger index = [indexPath row]; MyUITableViewCellCell* cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[MyUITableViewCellCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } cell.text = [self dataAtIndex:index]; return cell; } 

Salida:

 Here I am Row 0 frame=[0.000000 0.000000 320.000000 30.000000] cvframe=[0.000000 0.000000 320.000000 30.000000] Here I am Row 1 frame=[0.000000 30.000000 320.000000 30.000000] cvframe=[0.000000 0.000000 320.000000 30.000000] Here I am Row 0 frame=[0.000000 0.000000 320.000000 30.000000] cvframe=[0.000000 0.000000 320.000000 29.000000] Here I am Row 1 frame=[0.000000 30.000000 320.000000 30.000000] cvframe=[0.000000 0.000000 320.000000 29.000000] 

¿Se esperan 2 llamadas por celular o estoy haciendo algo mal?

Mi conjetura es que UITableView cambia el tamaño de la altura de la celda por un píxel para dejar espacio para dibujar líneas divisorias. El método layoutSubviews se vuelve a llamar una vez que UITableView establece el nuevo marco para la celda.