如何使UICollectionView的一部分中的所有项浮动在滚动视图上?

时间:2016-05-31 12:11:53

标签: ios autolayout uicollectionview constraints uicollectionviewcell

我希望section中一个UICollectionView的项目保持不变,而UICollectionView内的其他项目正在滚动。

我尝试通过设置Autolayout constraint将项目固定到superview的{​​{1}}来实现此目的。但是,这似乎不起作用,因为UICollectionView抱怨constraintsUICollectionViewCell UICollectionView's没有共同的祖先。

还有其他方法可以实现吗?

1 个答案:

答案 0 :(得分:0)

感谢Ad-J的评论,我能够实施解决方案。

我需要覆盖UICollectionViewFlowLayout并实施以下方法:

override func prepareLayout() {
    super.prepareLayout()

    //fill layoutInfo of type [NSIndexPath:UICollectionViewLayoutAttributes]
    //with layoutAttributes you need in your layout

    if let cv = self.collectionView {
        for (indexPath, tileToFloat) in layoutInfo {
            if indexPath.section == 0 {
                var origin = tileToFloat.frame.origin
                origin.y += cv.contentOffset.y + cv.contentInset.top
                tileToFloat.frame = CGRect(origin: origin, size: tileToFloat.size)
            }
            tileToFloat.zIndex = 1
        }
    }
}

override func shouldInvalidateLayoutForBoundsChange(newBounds: CGRect) -> Bool {
    return true
}

这将使第一部分中的所有项目都静止。