UICollectionViewCell的alpha属性在重新加载后才会生效?

时间:2015-03-12 17:10:57

标签: ios swift uicollectionview uicollectionviewcell

如果我在cellForItemAtIndexPath中设置单元格的alpha属性,如下所示......

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell: UICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("CGPathCell", forIndexPath: indexPath) as UICollectionViewCell
// Prepare cell
cell.alpha = 0.5
cell.setNeedsDisplay()
return cell
}

...最初出现的单元格是不透明的(alpha为1.0)。如果我滚动,出现的“新”(重用)单元格具有预期的alpha值。如果我回滚到开头,“原始”单元格(开始不透明)现在也具有预期的alpha值。

为什么初始加载时未设置alpha值?

其他不起作用的尝试:

  1. 将此添加到委托中,我得到相同的结果:

    func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) {
        cell.alpha = 0.5
    }
    
  2. 将此添加到cellForItemAtIndexPath

    let attrs = UICollectionViewLayoutAttributes(forCellWithIndexPath: indexPath)
    attrs.alpha = 0.5
    cell.applyLayoutAttributes(attrs)
    

2 个答案:

答案 0 :(得分:5)

我相信这种情况正在发生,因为Apple正在对单元格进行一些特殊的内部处理,作为UICollectionView的一部分。如果您在单元格的 contentView 属性上设置了alpha,则Alpha会按预期保持不变。

UICollectionViewCell docs 提示:

  

要配置单元格的外观,请将显示数据项内容所需的视图添加为contentView属性中视图的子视图。不要直接将子视图添加到单元格本身。

如果您有backgroundViewselectedBackgroundView,则需要单独设置其字母。

答案 1 :(得分:0)

前段时间我有一个简短的问题,重新调整PDF格式,可能是一样的。我用以下方式解决了这个问题,每次pdf都不得不调整大小时setNeedsDisplay不起作用,所以我制作了一个ViewController,其alpha:0并调用非动画segue到这个视图控制器,这样清晰的视图控制器在我想要更新的视图控制器之后,我立即解除了新的视图控制器,因此pdf更新为新的大小。此问题也很老,也许这可以帮助您解决问题。