2017-05-22 3 views
0

Aus irgendeinem Grunde Scrolling, wenn ich die Etiketten auf meiner UICollectionView Zelle bewegen fügt das Etikett über die aktuellen, wie unten zu sehen:Swift: UICollectionView Zelle Vervielfältigung von Etiketten- und Bild, wenn

enter image description here

Hier ist meine Code:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let myCell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath as IndexPath) 
    let centerY = (myCell.frame.size.height/2) - 50 
    let title = PaddingLabel(frame: CGRect(x: 120, y: centerY, width: 200, height: 100)) 

    let size = CGRect(x: 10, y: centerY, width: 100, height: 100) 

    let imageview: UIImageView = UIImageView(frame: size) 
    let image: UIImage = UIImage(named: categoryImages[indexPath.row])! 
    imageview.image = image 


    title.textAlignment = .left 
    title.clipsToBounds = true 
    title.numberOfLines = 2 
    title.font = title.font.withSize(25) 
    title.text = categoryTopics[indexPath.row] 

    switch (categoryColours[indexPath.row]) { 
    case ("ef5c42"): 
     myCell.backgroundColor = UIColor(r: 239,g: 92,b: 66) 
     title.textColor = .white 
    case ("red"): 
     myCell.backgroundColor = UIColor.red 
    case ("green"): 
     myCell.backgroundColor = UIColor.green 
    case ("blue"): 
     myCell.backgroundColor = UIColor.blue 
    default: 
     myCell.backgroundColor = UIColor.yellow 
     title.textColor = .white 
    } 


    myCell.contentView.addSubview(title) 
    myCell.contentView.addSubview(imageview) 

    return myCell 
} 

ich habe das Hinzufügen versucht:

for view in cell.subviews { 
    view.removeFromSuperview() 
} 

, aber das scheint nur eine leere Zelle anzuzeigen.

Antwort

1

Wenn Sie Ich werde die Zelle von Grund auf neu konstruieren, jedes Mal wenn du sie bekommst, könntest du einfach faul sein und sie nicht herausnehmen.

Das heißt, Änderung:

let myCell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath as IndexPath) 

zu:

let myCell = UICollectionViewCell() 

Obwohl ich bin überrascht, dass es nicht zu entfernen, funktioniert einfach alle Subviews direkt nach dem Warteschlangenauflösungs. Das Unten sieht gut aus für mich.

let myCell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath as IndexPath) 
for view in myCell.contentView.subviews { 
    view.removeFromSuperview() 
} 

Obwohl ich mit Barns52, die beste Sache einig eine benutzerdefinierte UITableViewCell zu tun wäre, um zu erstellen, die Ihrem Stil passt mit einem Etikett und Bild usw., und stellen Sie dann das Bild und beschriften Werte jedes Mal, nicht neu erstellen und sie als Unteransichten jedes Mal hinzufügen.

+0

Sie erhalten die Punkte, da ich vergessen habe, contentView in meiner for-Schleife hinzuzufügen. Das hat es gelöst. Vielen Dank. – JamesG

1

Sie haben versucht, eine benutzerdefinierte Zelle innerhalb Ihrer tableview zu erstellen, fügen jedoch die Ansichten hinzu, während Sie durch die Zellen iterieren. Sie müssen eine benutzerdefinierte Klasse für Ihre Zelle erstellen und die Ansichten hinzufügen, die Sie verwenden möchten.

Dann müssen Sie es wie folgt aus der Warteschlange entfernt:

let myCell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath as IndexPath) as! yourCustomClass 

Dann einfach Ihre Daten, um die Ansichten in yourCustomClass wie folgt hinzu:

myCell.title.text = categoryTopics[indexPath.row] 

und

let image: UIImage = UIImage(named: categoryImages[indexPath.row])! 
myCell.imageview.image = image 
Verwandte Themen