UICollectionView mostrando celdas antiguas al cambiar de layout

Tengo una UICollectionView dentro de UIViewController. También tengo dos layouts diferentes a los que cambio cuando presiono un button.

Los layouts cambian entre dos celdas que he creado en dos files nib. Dado que las dos celdas hacen el mismo cambio y sus layouts son simplemente diferentes, he usado la misma class para ambos, que es una subclass de UICollectionViewCell.

Entonces, cuando se carga mi vista, logging mis dos celdas, así:

[self.tradeFeedCollectionView registerNib:[UINib nibWithNibName:@"BBItemTableViewCell" bundle:nil] forCellWithReuseIdentifier:@"TableItemCell"]; [self.tradeFeedCollectionView registerNib:[UINib nibWithNibName:@"BBItemGridViewCell" bundle:nil] forCellWithReuseIdentifier:@"GridItemCell"]; 

Los dos layouts son una subclass de UICollectionViewFlowLayout. En la subclass de layout solo utilizo un método para establecer el tamaño y el espaciado de los layouts / celdas, así:

 -(id)init { self = [super init]; if (self){ self.itemSize = CGSizeMake(320, 80); self.minimumLineSpacing = 0.1f; } return self; } 

Esto funciona como las celdas siempre tienen el tamaño correcto cuando se cambian las vistas.

Para cambiar las vistas, tengo un button UIB que tiene el siguiente código:

 [self.tradeFeedCollectionView.collectionViewLayout invalidateLayout]; if (!self.gridLayoutActive){ self.gridLayoutActive = YES; [self.tradeFeedCollectionView setCollectionViewLayout:self.grideLayout animated:YES]; self.lastLayoutUsed = @"GridLayout"; } else { self.gridLayoutActive = NO; [self.tradeFeedCollectionView setCollectionViewLayout:self.tableViewLayout animated:YES]; self.lastLayoutUsed = @"TableLayOut"; } 

Con el código anterior, obtengo una buena animation y la vista cambia entre las dos celdas.

El problema

Cuando se cambian las vistas, el área visible de UICollectionView tiene las celdas anteriores y no se ha actualizado a nuevas celdas. Las celdas en realidad han cambiado de forma, pero la vista desde las celdas viejas queda atrás. Cuando comienzo a desplazarme, las celdas se muestran correctamente y todas las celdas viejas desaparecen.

** Lo que probé **

Encontré que llamando a este código:

 [self.collectionView reloadItemsAtIndexPaths:[self.collectionView indexPathsForVisibleItems]]; 

después de cambiar el layout lo soluciono un poco; sin embargo, pierdo la animation y parece extraño.

¿Alguien me puede ayudar? Realmente lo apreciaría.

De hecho, he resuelto este problema:

Mira mi pregunta aquí: Llamar a setCollectionViewLayout: animated no recarga UICollectionView

Actualicé mi pregunta con la solución que funcionó para mí.