Uicollection Viewcell Border / Shadow

lors de la construction d'une application iPad, Comment Pouvez-vous dessiner une bordure autour D'un UICollectionViewCell?

plus de détails: j'ai mis en œuvre une classe ProductCell qui étend Uicollection Viewcell. Maintenant, je voudrais assigner quelques détails fantaisistes, par exemple une bordure, une ombre, etc. Cependant, en essayant d'utiliser quelque chose comme ici , Xcode me dit que le type de récepteur 'CALayer' est une déclaration forward.

30
demandé sur Community 2012-10-29 16:05:29

4 réponses

Juste pour un peu plus de mise en œuvre:

#import <QuartzCore/QuartzCore.h>

dans votre.m

assurez-vous que votre classe implémente

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath; 

car c'est ici que la cellule est configurée.

vous pouvez alors changer cell.layer.background (seulement disponible une fois que le quartz est importé)

voir ci-dessous

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    MyCollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"pressieCell" forIndexPath:indexPath];
    //other cell setup here

    cell.layer.borderWidth=1.0f;
    cell.layer.borderColor=[UIColor blueColor].CGColor;

    return cell;
}
71
répondu James Dawson 2016-07-26 20:36:19

Swift

mise à jour pour Swift 3

en supposant que vous avez votre vue Collection configuré avec les méthodes requises , vous pouvez juste écrire quelques lignes de code pour ajouter la frontière.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! MyCollectionViewCell
    cell.myLabel.text = self.items[indexPath.item]
    cell.backgroundColor = UIColor.cyan 

    // add a border
    cell.layer.borderColor = UIColor.black.cgColor
    cell.layer.borderWidth = 1
    cell.layer.cornerRadius = 8 // optional

    return cell
}

Notes

  • Il n'est pas nécessaire d'importer QuartzCore rapide si vous avez déjà importé UIKit .
  • si vous voulez aussi ajouter de l'ombre, alors voir cette réponse .
14
répondu Suragch 2017-05-23 11:47:05

vous devez inclure le cadre QuartzCore et importer l'en-tête dans votre classe:

#import <QuartzCore/QuartzCore.h>
7
répondu Mundi 2012-10-29 12:16:09

Swift 4

cell.layer.borderColor = UIColor.black.cgColor
cell.layer.borderWidth = 1

ajouter dans la méthode datasource, après avoir créé la cellule

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath)
     cell.layer.borderColor = UIColor.black.cgColor
     cell.layer.borderWidth = 1
}
1
répondu Naishta 2018-08-10 05:06:04