J'ai un problème simple auquel je ne trouve pas de solution sur Google, la documentation ou ici.
J'ai un Collectionview dans mon contrôleur de vue. J'ai créé une cellule personnalisée, DescriptionCell, qui contient un UIImage. Je veux que cette image ait des coins arrondis. Cependant, je ne sais pas où placer le cornerradius sur la couche UIImage. J'ai essayé dans la méthode awakeFromNib des cellules, dans la méthode déléguée CellForRowAtIndexPath et substitué LayoutSubview dans la cellule mais cela ne fonctionne pas . Où dois-je placer le code pour définir le rayon de UIImage?
Pour préciser, je sais comment créer des coins arrondis d'un UIImage. Mais s'il s'agit d'une sous-vue d'une cellule Collectionview, je ne sais pas où définir le cornerradius.
Voici le code pour ma descriptionCell
class DescriptionCell: UICollectionViewCell {
@IBOutlet weak var mImage: UIImageView!
override func awakeFromNib() {
//mImage.layer.cornerradius = 5
//Does not work, the image is still square in the cell
}
Et dans le cellforRowAtIndePath
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("descriptioncell", forIndexPath: indexPath) as! DescriptionCell
//cell.mImage.layer.cornerradius = 5
//Does not work, the image is still square in the cell
return cell
}
Merci d'avance!
Eh bien, vous utilisez une partie du code de la réponse que vous avez utilisée… .. L’autre partie est imageView.clipsToBounds = true
Mettez à jour votre awakeFromNib
comme ceci:
override func awakeFromNib() {
mImage.layer.cornerRadius = 5
mimage.clipsToBounds = true
}
Pour en faire un cercle, vous devez définir cornerRadius sur la moitié de la hauteur carrée. Dans votre cellForItemAtIndexPath
, ajoutez ces lignes:
cell.layoutIfNeeded()
cell.mImage.layer.cornerRadius = cell.mImage.frame.height/2
Mettre à jour
Pour éviter que layoutSubviews
soit appelé deux fois, remplacez layoutSubviews
dans votre classe DescriptionCell
et mettez le code à cet endroit:
override func layoutSubviews() {
super.layoutSubviews()
layoutIfNeeded()
mImage.layer.cornerRadius = mImage.frame.height/2
}
Avez-vous essayé de l'insérer dans la fonction init de UICollectionViewCell personnalisée?
override init(frame: CGRect) {
super.init(frame: frame)
image.layer.masksToBounds = true
image.layer.cornerRadius = 10
}