UICollectionViewCell 在帧更新时不会改变

Posted

技术标签:

【中文标题】UICollectionViewCell 在帧更新时不会改变【英文标题】:UICollectionViewCell doesn't change on frame update 【发布时间】:2014-07-11 13:41:55 【问题描述】:

我正在尝试使用UIPanGestureRecognizer 制作自定义可滑动UICollectionViewCell。这是我的代码:

在自定义UICollectionViewCell

func setup() 
    attributes = delegate.attributesForCell(self)
    selectionView = UIView(frame: attributes.frame)
    self.addSubview(selectionView)
    let cellPan = UIPanGestureRecognizer(target: self, action: "cellDidPan:")
    selectionView.addGestureRecognizer(cellPan)


func cellDidPan(gesture: UIPanGestureRecognizer) 
    switch gesture.state 
    case .Began:
        originalFrame = attributes.frame
    case .Changed:
        let translation: CGPoint = gesture.translationInView(selectionView)
        attributes.frame = CGRect(origin: CGPoint(x: originalFrame.origin.x + translation.x, y: originalFrame.origin.y), size: originalFrame.size)
        println("t \(translation.x)")
        println("c \(attributes.center)")
        println("f \(attributes.frame)")
    case .Ended:
        println("nothing here yet")
    default:
        println("Unrecognized gesture state")
    

UICollectionViewController(单元格的代表)中:

func attributesForCell(cell: SwipeableCollectionViewCell) -> UICollectionViewLayoutAttributes 
    let indexPath = collectionView.indexPathForCell(cell)
    return collectionView.layoutAttributesForItemAtIndexPath(indexPath)

当我在UICollectionViewCell 上滑动时,框架会记录正确的更改(除了 x 坐标,它向左滑动变小,向右滑动变大),但单元格只是停留在同一个地方。

我正在使用UICollectionViewFlowLayout,并在故事板和界面生成器中设置所有内容。

【问题讨论】:

如果您找到了问题的答案,请将其写下来作为答案,提供详细的信息,以便其他人将来遇到同样的问题时有所帮助。 【参考方案1】:

我找到了答案! layoutAttributesForItemAtIndexPath() 返回属性的副本,而不是实际的属性对象。这意味着修改这些属性显然不会做任何事情。相反,请使用 UICollectionViewCell 属性。

【讨论】:

以上是关于UICollectionViewCell 在帧更新时不会改变的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionViewCell 中的标签文本未更新

在 UICollectionViewCell 中更新 UITableView

NSOperationQueue mainQueue 不更新 UICollectionViewCell

UICollectionViewCell 在代码中调整布局后更新约束

UICollectionViewCell 不更新图像(如果可见)

子类 UICollectionViewCell 不更新图像