2

Ich versuche, eine 50% schwarze Alpha-Ansicht für jede Sammlungsansichtszelle hinzuzufügen. Die Zellen der Sammlungsansicht haben ein Hintergrundfoto und einen Text oben. Möchte die Overlay-Ansicht zwischen den beiden sein.Hinzufügen einer Überlagerungsansicht zu UICollectionViewCell - wird überlagert

In meinem cellForItemAt Methode verwende ich folgendes:

let overlayView = UIView() 
overlayView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5) 
overlayView.frame = cell.bounds 
cell.addSubview(overlayView) 

Das Problem ist, wie ich nach unten scrollen, dann nach oben, hält das Overlay hinzufügen, so dass die alpha viel dunkler als 50%. Darüber hinaus wird das OverlayView über meinen Text hinzugefügt (ich brauche es unter dem Text).

Wie kann ich verhindern, dass das Overlay mehrere Male hinzufügen und zwischen den richtigen Schichten der Zelle hinzufügen?

+0

wo Sie Overlayview auf Cell-Initialisierungsdatei oder Cellfortematindex-Methode hinzufügen? –

Antwort

2

Dies passiert, weil Ihre Zellen mehrere Male aus der Warteschlange entfernt und wiederverwendet werden, daher fügen Sie mehrere Ebenen hinzu.

diesen Code Legen Sie innerhalb der Klasse Ihre Zelle

override func awakeFromNib() { 
    super.awakeFromNib() 
    let overlayView = UIView() 
    overlayView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5) 
    overlayView.frame = self.bounds 
    self.addSubview(overlayView) 
} 

Oder wenn Sie das gleiche Ergebnis erreichen wollen Sie schwarze Backgroundcolor und eingestellt Imageview Alpha zu 50%

cell.backgroundColor = .black 
cell.imageView.alpha = 0.5 
+0

Dies schien der Trick zu sein, die Overlays nicht überlappen zu lassen! – Joe

+0

Wie wäre es, die Unteransicht zwischen zwei Ebenen hinzuzufügen? – Joe

+0

Überprüfen Sie meine aktualisierte Antwort, wenn Sie keine zusätzliche Ansicht benötigen. – Phyber

2

Vermeiden Sie das Hinzufügen in CellForItem. Die Zellen werden wiederverwendet. Wenn Sie also die Ansicht hinzufügen, wird sie übereinander gelegt. Bei der Wiederverwendung der Zelle wird die zuvor hinzugefügte Ansicht nicht entfernt. Stattdessen können Sie die Ansicht in der Zelle Prototype oder XIB hinzufügen und das Alpha auf das einstellen, was Sie wollen. Oder wenn Sie die Zelle programmatisch erstellen, können Sie dies in watchFromNib() tun.

2

UITableView hat ein Verfahren einstellen Wiederverwendung von Zellen, um sie effizienter zu machen (nur die benötigten Zellen im Speicher zu halten). Aus diesem Grund hat die wiederverwendete Zelle möglicherweise bereits diese Unteransicht. Wenn Sie also erneut addSubview aufrufen, wird eine weitere Ansicht hinzugefügt.

Hier ist, wie dieses Problem zu lösen:

Verschieben addSubview(overlayView) zur layoutSubviews() Methode in Ihrer Zelle Unterklasse.

override func layoutSubviews() { 
    super.layoutSubviews() 
    addSubview(overlayView) 
} 

die Überlagerungsansicht in der prepareForReuse() Methode in Ihrer Zelle Unterklasse entfernen.

override func prepareForReuse() { 
    super.prepareForReuse() 
    overlayView.removeFromSuperview() 
} 

Beachten Sie, dass dies erfordert, dass Sie die Überlagerungsansicht in der Zelle Unterklasse definieren (die Sie wahrscheinlich tun sollten, da die Zelle selbst für seine eigene Subviews verantwortlich sein soll).

Verwandte Themen