Ios 重用单元格时,自定义UICollectionViewCell的子视图显然未重新绘制

Ios 重用单元格时,自定义UICollectionViewCell的子视图显然未重新绘制,ios,uiview,ios9,uicollectionviewcell,Ios,Uiview,Ios9,Uicollectionviewcell,我有一个UICollectionViewController,它的collectionView:cellForItemAtIndexPath:返回UICollectionViewCell的子类。此单元格有两个子视图,这些子视图也配置为单元格的出口(例如,cell.dot,一个自定义的UIView,在其drawRect:中绘制彩色点) 可能发生的情况是(至少部分)在滚动集合时(即在重复使用单元格时),这些子视图不会刷新。如果我明确地将子视图标记为需要重新绘制,那么问题就会消失: override

我有一个
UICollectionViewController
,它的
collectionView:cellForItemAtIndexPath:
返回
UICollectionViewCell
的子类。此单元格有两个子视图,这些子视图也配置为单元格的出口(例如,
cell.dot
,一个自定义的
UIView
,在其
drawRect:
中绘制彩色点)

可能发生的情况是(至少部分)在滚动集合时(即在重复使用单元格时),这些子视图不会刷新。如果我明确地将子视图标记为需要重新绘制,那么问题就会消失:

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    // ...
    assert(cell.dot.superview == cell.contentView)
    cell.dot.setNeedsDisplay() // apparently required for dot to be redrawn
    return cell
}

重用的
UICollectionViewCell
s的子视图不会自动重画,这是正常行为吗?我遗漏了什么吗?

Xcode 9 beta和Swift 3-同样的行为,子视图的
draw(rect:)
在该子视图上直接调用
setNeedsDisplay
之前不会被调用。