it-swarm.com.de

Setzen Sie in UICollectionViewCell schnell abgerundete Ecken für UIimage

Ich habe ein einfaches Problem, für das ich keine Lösung für Google, die Dokumente oder hier finden kann.

Ich habe eine Collectionview in meinem View-Controller. Ich habe eine benutzerdefinierte Zelle, DescriptionCell, erstellt, die einen UIImage enthält. Ich möchte, dass dieses Bild abgerundete Ecken hat. Ich weiß jedoch nicht, wo ich den Cornerradius auf der UIImage-Ebene einstellen soll. Ich habe in der awakeFromNib-Methode der Zellen versucht, in der Delegate-Methode CellForRowAtIndexPath und LayoutSubview in der Zelle zu überschreiben, aber es funktioniert nicht.

Um genau zu sein, weiß ich, wie man abgerundete Ecken eines UIImage erstellt. Wenn es sich jedoch um eine Unteransicht einer Collectionview-Zelle handelt, weiß ich nicht, wo der Cornerradius eingestellt werden soll.

Hier ist der Code für meine 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
    }

Und im 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    
}

Danke im Voraus!

13
Jell92

Nun, Sie verwenden einen Teil des Codes aus der Antwort, von der Sie sagten, dass Sie sie benutzt haben. Der andere Teil ist imageView.clipsToBounds = true

Aktualisieren Sie Ihre awakeFromNib so:

override func awakeFromNib() {
    mImage.layer.cornerRadius = 5 
    mimage.clipsToBounds = true
}

Um es zu einem Kreis zu machen, müssen Sie cornerRadius auf die Hälfte der Quadrathöhe setzen. Fügen Sie in Ihrer cellForItemAtIndexPath folgende Zeilen hinzu:

cell.layoutIfNeeded()
cell.mImage.layer.cornerRadius = cell.mImage.frame.height/2

Update

Um zu vermeiden, dass layoutSubviews zweimal aufgerufen wird, überschreiben Sie layoutSubviews in Ihrer DescriptionCell-Klasse und geben Sie den Code dort ein:

override func layoutSubviews() {
    super.layoutSubviews()
    layoutIfNeeded()
    mImage.layer.cornerRadius = mImage.frame.height/2
}
19
Sam_M

Haben Sie versucht, es in die Init-Funktion der benutzerdefinierten UICollectionViewCell zu platzieren?

override init(frame: CGRect) {
    super.init(frame: frame)

    image.layer.masksToBounds = true
    image.layer.cornerRadius = 10
}
1
Hama

Sie können auch eine Erweiterung wie folgt erstellen:

extension UIView {
    func addBorder(color: UIColor, cornerRadius: CGFloat = 10, borderWidth: CGFloat = 1.0) {
        layer.borderWidth = borderWidth;
        layer.borderColor = color.cgColor
        layer.cornerRadius = cornerRadius
        layer.masksToBounds = true
    }
}
0
Breno Prata