2

我想創建4個不同類型的多個collectionViewCells。每個細胞對這四種類型之一有不同的看法。基於用戶選擇,這些類型的每個視圖都可以具有不同的內容。collectionView單元格重疊

我遇到的問題是,當屏幕上顯示相同類型的多個視圖/單元格時,某些卡片重疊/無法正確加載。

-(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; 
} 

卡是我添加到單元格中的視圖。如上所述,這些卡有多種類型。

回答

4

嘗試使用:

cell.clipsToBounds = YES; 
5

當您滾動UICollectionView時,消失在屏幕外的單元格將重新用於屏幕上顯示的新單元格。這意味着如果在collectionView:cellForItemAtIndexPath:方法中添加子視圖,那麼當該單元格被重新使用時,它們仍將是單元格視圖層次結構的一部分。每次細胞被重新使用時,當您撥打[cell addSubview:card]時,它會添加一個新的子視圖。您的卡片子視圖將簡單堆疊在一起。

看來您正在使用一組Card對象,自定義UIView子類來存儲每個用戶的一副撲克牌。我會建議您將模型從視圖中分離出來 - 將每張卡片存儲爲一個簡單的數據模型,它代表卡片的獨立顯示方式(請參閱MVC)。然後,您可以創建一個可以顯示任何卡的自定義UICollectionViewCell子類。在您的collectionView:cellForItemAtIndexPath:中,您只需根據相應的卡數據重新配置單元的視圖即可。這樣您就不需要在collectionView:cellForItemAtIndexPath:方法中調用addSubview:

+0

謝謝你,我會看看這個方法用於固定號碼我有其他問題;) –