collectionView celdas superpuestas

Estoy intentando crear multiple collectionViewCells con 4 types diferentes. Y cada celda tiene una vista diferente de uno de esos 4 types. Cada vista de esos types puede tener diferentes contenidos según la selección del usuario.

El problema que estoy teniendo es el hecho de que algunas de las tarjetas se superponen / no se cargan correctamente cuando hay varias vistas / celdas del mismo tipo en la pantalla.

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { Card *card = [[[usermanager getSelectedUser] getCards] objectAtIndex:indexPath.item]; NSLog(@"CARD LOADING: %@", card.title); [card setupLayout]; UICollectionViewCell *cell; if(card.type.intValue == 1){ cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"lifestyleCell" forIndexPath:indexPath]; }else if(card.type.intValue == 2){ cell= [collectionView dequeueReusableCellWithReuseIdentifier:@"sceneCell" forIndexPath:indexPath]; }else if(card.type.intValue == 3){ cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"energyCell" forIndexPath:indexPath]; }else if(card.type.intValue == 4){ cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"productCell" forIndexPath:indexPath]; }else{ cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cardCell" forIndexPath:indexPath]; } [cell addSubview:card]; //Add dropshadow cell.contentView.layer.borderWidth = 1.0f; cell.contentView.layer.borderColor = [UIColor clearColor].CGColor; cell.contentView.layer.masksToBounds = YES; cell.layer.shadowColor = [UIColor blackColor].CGColor; cell.layer.shadowOffset = CGSizeMake(0, 5.0f); cell.layer.shadowRadius = 2.0f; cell.layer.shadowOpacity = 0.5f; cell.layer.masksToBounds = NO; return cell; } 

La tarjeta es la vista que agrego a la celda. Como se mencionó anteriormente, hay múltiples types de esas tarjetas.

intente usar:

 cell.clipsToBounds = YES; 

Al desplazarse por UICollectionView , las células que desaparecen de la pantalla se vuelven a utilizar para las nuevas celdas que aparecen en la pantalla. Eso significa que si agrega subvenciones en su método collectionView:cellForItemAtIndexPath: seguirán siendo parte de la jerarquía de la vista de la celda cuando esa celda se reutilice. Cada vez que se vuelva a usar la celda, agregará una nueva subvista cuando llame a [cell addSubview:card] . Sus subidas de tarjeta simplemente se astackn una encima de la otra.

Parece que está utilizando una colección de objects Card , subclasss UIView personalizadas, para almacenar el mazo de cartas de cada usuario. Sugiero en cambio que separe el model de la vista: almacene cada tarjeta como un model de datos simple que representa la tarjeta independientemente de cómo se muestre (vea MVC). Entonces puede crear una subclass UICollectionViewCell personalizada que puede mostrar cualquier tarjeta. En su collectionView:cellForItemAtIndexPath: simplemente reconfigurar la vista de la celda de acuerdo con los datos de la tarjeta correspondiente. De esa forma no necesita llamar a addSubview: dentro de su collectionView:cellForItemAtIndexPath: method.