0

Ich habe eine UICollectionView horizontale scroll durch programmgesteuert erstellt. UICollectionView Zellenbreite wird basierend auf dem Inhalt dynamisch erstellt.UICollectionView dynamic cell overlap Problem

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

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath as IndexPath) as! CustomCollectionViewCell 
    cell.label.text = dataSource[indexPath.item] 
    cell.label.font = UIFont(name: "Helvetica", size: 20.0) 

    if currentPageIndex == indexPath.item { 

     cell.currentPageIndicator.frame = CGRect(x: 0, y: cell.bounds.height - 2, width: cell.bounds.width, height: 2.5) 
     cell.currentPageIndicator.isHidden = false 
    } 

    return cell 

} 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 

    if let size = cellSizeCache.object(forKey: indexPath as AnyObject) as? NSValue { 
     return size.cgSizeValue 
    } 

    let string = dataSource[indexPath.item] 
    let height = collectionView.frame.size.height 
    let font = UIFont(name: "Helvetica", size: 20.0) 
    var size = string.boundingRect(with: CGSize(width: CGFloat.infinity, height: height), options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: [NSFontAttributeName: font!], context: nil).size 

    size.width += 20 
    size.height += 20 

    return size 

} 

zunächst ein UICollectionView sucht in Ordnung, auch wenn ich horizontal scrollen. enter image description here Wenn ich schnell scrollen, überlappen sich die Zellen miteinander. enter image description here

Antwort

0

Ihre Zellen überlappen, da die Breite der Zelle kleiner ist als die Größe des Inhalts. Sie haben zwei Optionen: Die erste Option besteht darin, die Breite der Zelle im Storyboard zu erhöhen. Zweite Option ist die Größe für jede Zelle in Kollektion Methode mit dem Namen „sizeforcellatindexpath“, Probenmethode festgelegt ist unten angegeben:

optional func collectionView(_ collectionView: UICollectionView, 
       layout collectionViewLayout: UICollectionViewLayout, 
     sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 

    return size 

    } 

Sie mithilfe von Berechnungsmechanismus der Größe der Zeichenfolge berechnen können. Beispiel für die Sammlung in unten angegeben:

How to calculate the width of a text string of a specific font and font-size?