2016-05-04 30 views
7

Devo creare un'ombra per le celle all'interno di UICollectionView. Ho sottoclasse cellule e all'interno del layoutSubviews Ho aggiunto il seguente codice:Come creare un'ombra per UICollectionViewCell

-(void)layoutSubviews{ 

    [super layoutSubviews]; 

    self.layer.masksToBounds = NO; 
    self.layer.shadowOpacity = 0.75f; 
    self.layer.shadowRadius = 5.0f; 
    self.layer.shadowOffset = CGSizeZero; 
    self.layer.shadowColor = [UIColor blackColor].CGColor; 
    self.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.bounds].CGPath; 


} 

Ma le cellule diventa più alta e questo è il risultato:

enter image description here

Se rimuovo il:

self.layer.masksToBounds = NO; 

le cellule vengono visualizzati correttamente (con una distanza di 10px tra loro), ma l'ombra non è visibile. Che cosa sto facendo di sbagliato? Inoltre, è corretto aggiungere l'ombra all'interno del metodo layoutSubviews?

+0

Avete bisogno di spazio tra le cellule? imposta shadowoffset e rimuovi shadowpath. –

+0

@VasanthanPrem sì, ho bisogno di spaziatura tra le celle, se rimuovo il codice all'interno di layoutSubviews posso vedere correttamente la spaziatura, ma usando quel codice per aggiungere un'ombra si ottengono le celle senza spazio tra loro – Signo

risposta

0

trovato, ho dimenticato di aggiungere questa riga all'interno delle layoutSubviews:

self.clipsToBounds = YES; 

Ora le cellule ha sia la spaziatura e l'ombra

6

È necessario abilitare l'ombra da creare al di fuori dei limiti;

[cell.layer setMasksToBounds:NO]; 
3
func dropShadow() { 
    self.layer.masksToBounds = false 
    self.layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.25).cgColor    
    self.layer.shadowOpacity = 0.5 
    self.layer.shadowOffset = CGSize(width: 0.0, height: 2.0) 
    self.layer.shadowRadius = 4.0  
    self.layer.cornerRadius = 5.0 
} 

//Direct Add Shadow to cell 

Cell.dropShadow()