0

プログラムで水平スクロールをUICollectionView作成しました。 UICollectionViewセル幅はコンテンツに基づいて動的に作成されます。UICollectionView動的セルオーバーラップの問題

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 

} 

最初に、UICollectionViewは水平にスクロールしてもきれいに見えます。 enter image description here スクロールを高速に開始すると、セルは互いに重なり合っています。 enter image description here

答えて

0

セルの幅がコンテンツのサイズより小さいため、セルが重なっています。 2つのオプションがあります。最初の選択肢は、ストーリーボードのセルの幅を広げることです。第二の選択肢は、サンプルの方法を以下に示す、「sizeforcellatindexpath」という名前のcollectionview方法の各セルのサイズを設定することです:

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

    return size 

    } 

あなたは計算のメカニズムを使用して、文字列のサイズを計算することができます。以下の収集用サンプル:

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

関連する問題