将 UIView 动态添加到 UICollectionView 中的单元格仅适用于第一个单元格

Posted

技术标签:

【中文标题】将 UIView 动态添加到 UICollectionView 中的单元格仅适用于第一个单元格【英文标题】:Adding UIView dynamically to cells in UICollectionView only works for the first cell 【发布时间】:2016-03-27 18:06:27 【问题描述】:

在下面的代码中,目标是为每个 UICollectionViewCell 动态添加一个 UIView。但是,UIView 只会添加到第一个单元格。

在调用doInit 时,打印 UICollectionViewCell 框架显示该框架是正确的,那么为什么代码只适用于第一个单元格?

UICollectionView 代码:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    // Get cell
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(PantryStyleCellIdentifer, forIndexPath: indexPath) as! PantryStyleCell

    // Get style & init cell
    let style = pantry[indexPath.row]
    cell.doInit(style)

    // Return cell
    return cell

UICollectionViewCell 代码:

class PantryStyleCell: UICollectionViewCell 
    var _style : BlockStyle?

    func doInit(style: BlockStyle) 
        // Store vars
        _style = style

        let testView = UIView(frame: frame)
        testView.backgroundColor = gGreenColor
        addSubview(testView)
    

【问题讨论】:

也许你应该在 self.contentView 中查看它。不知道怎么了。其实你不应该那样做,因为当再次重用视图时,会有2个testView, 【参考方案1】:

您将视图的frame 设置为self.frame,您应该将其设置为边界。

let testView = UIView(frame: bounds)

【讨论】:

以上是关于将 UIView 动态添加到 UICollectionView 中的单元格仅适用于第一个单元格的主要内容,如果未能解决你的问题,请参考以下文章

无法将tableview添加到uiview

如何动态地将动画添加到队列中

如何在 iOS 中将 UIView 添加到 UIScrollView 中(具有动态内容的视图)

iOS 7 - 自定义 UIView 的动态壁纸行为

在 UIView 中动态居中对齐多个不同大小的 UIButton

在用户选择/在 ios swift 中突出显示时动态删除自定义 UIView