J'ai donc déjà parcouru divers articles sur l'ajout d'une deuxième vue pour ajouter une ombre, mais je ne peux toujours pas le faire fonctionner si je veux l'ajouter UICollectionViewCell
. J'ai sous UICollectionViewCell
- classé , et voici mon code dans lequel j'ajoute divers éléments d'interface utilisateur à la vue de contenu de la cellule et ajoute une ombre à la couche:
[self.contentView setBackgroundColor:[UIColor whiteColor]];
self.layer.masksToBounds = NO;
self.layer.shadowOffset = CGSizeMake(0, 1);
self.layer.shadowRadius = 1.0;
self.layer.shadowColor = [UIColor blackColor].CGColor;
self.layer.shadowOpacity = 0.5;
[self.layer setShadowPath:[[UIBezierPath bezierPathWithRect:self.bounds] CGPath]];
Je voudrais savoir comment ajouter un coin arrondi et une ombre UICollectionViewCell
.
iphone
ios
uicollectionviewcell
Vincent Yiu
la source
la source
Réponses:
Aucune de ces solutions n'a fonctionné pour moi. Si vous placez toutes vos sous-vues dans la vue de contenu UICollectionViewCell, ce que vous êtes probablement, vous pouvez définir l'ombre sur la couche de la cellule et la bordure sur la couche de contentView pour obtenir les deux résultats.
Swift 3.0
la source
cell.layer.backgroundColor = [UIColor clearColor].CGColor;
Version Swift 3:
la source
Au cas où cela aiderait: voici le swift pour arrondir les coins:
la cellule étant une variable contrôlant la cellule: souvent, vous l'utiliserez dans
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
Prendre plaisir!
la source
Voici la solution Swift 4 , mise à jour pour arrondir tous les coins et pas seulement les coins supérieurs:
la source
Définissez les
layer
attributs de la cellule, pascontentView
.la source
SWIFT 4.2
Il faut ajouter ceci dans votre cellule personnalisée ou cellForItemAt: Si vous utilisez la cellule cellForItemAt: approche substitute self -> cell
Cela vous donnera une cellule avec une bordure arrondie et une ombre portée.
la source
Voici ma réponse, proche des autres, mais j'ajoute un rayon de coin au calque sinon les coins ne se rempliront pas correctement. En outre, cela fait une belle petite extension sur
UICollectionViewCell
.}
Vous pouvez l'appeler dans
collectionView(_:cellForItemAt:)
la source de données une fois que vous avez retiré votre cellule de la file d'attente.la source
Vous devez simplement (a) définir
cornerRadius
et (b) définirshadowPath
pour être un rect arrondi avec le même rayon quecornerRadius
:la source
J'ai dû faire quelques légers changements pour Swift :
la source
La réponse de Mike Sabatini fonctionne très bien, si vous configurez les propriétés de la cellule directement sur la collectionView cellForItemAt, mais si vous essayez de les définir dans awakeFromNib () d'une sous-classe UICollectionViewCell personnalisée, vous vous terminerez par un mauvais ensemble de bezierPath sur les appareils qui ne ne correspondent pas à la largeur et à la hauteur précédemment définies dans votre Storyboard (IB).
La solution pour moi était de créer une fonction dans la sous-classe de UICollectionViewCell et de l'appeler à partir de cellForItemAt comme ceci:
Et sur le CustomCollectionViewCell.swift:
la source
Celui-ci a fonctionné pour moi
la source
J'utilise la méthode suivante pour accomplir ce genre d'effet:
la source
Vous pouvez définir la couleur, le rayon et le décalage de l' ombre dans la méthode UICollectionViewDataSource lors de la création d'un UICollectionViewCell
la source
Voici mon avis sur la solution. C'est similaire à d'autres réponses, avec une différence essentielle. Il ne crée pas de chemin dépendant des limites de la vue. Chaque fois que vous créez un chemin basé sur les limites et que vous le fournissez à la couche, vous pouvez rencontrer des problèmes lors du redimensionnement et vous devez configurer des méthodes pour mettre à jour le chemin.
Une solution plus simple consiste à éviter d'utiliser tout ce qui dépend des limites.
Désormais, chaque fois que la taille des cellules change, l'API de vue fera tout le travail en interne.
la source
J'ai trouvé une chose importante: l'UICollectionViewCell doit avoir le backgroundColor comme
clear
couleur pour que ces derniers fonctionnent.la source