如何使 UICollectionView 的一部分中的所有项目浮动在滚动视图上?
Posted
技术标签:
【中文标题】如何使 UICollectionView 的一部分中的所有项目浮动在滚动视图上?【英文标题】:How to make all items in a section of a UICollectionView float over the scroll view? 【发布时间】:2016-05-31 12:11:53 【问题描述】:我希望UICollectionView
中的一个section
的项目保持静止,而UICollectionView
中的其余项目正在滚动。
我试图通过设置Autolayout
constraint
将项目固定到superview
的UICollectionView
来实现这一点。但是,这似乎不起作用,因为 constraints
抱怨 UICollectionViewCell
和 UICollectionView's
superview
没有共同的祖先。
还有其他方法可以实现吗?
【问题讨论】:
使用另一个视图.. 不要在集合视图中添加它。 问题是用户需要能够将项目从一个部分拖放到另一个部分。引入另一种视图会使这样做变得更加困难 您是否尝试将标题用于集合视图?如here 所述,可以实现浮动标头 这种方法似乎只适用于补充视图(页眉和页脚),但我需要实际的 UICollectionView 项目保持静止 【参考方案1】:感谢 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
这将使第一部分中的所有项目静止。
【讨论】:
以上是关于如何使 UICollectionView 的一部分中的所有项目浮动在滚动视图上?的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式使 UICollectionView 填充 UITableViewCell?
如何拥有多个带有标题的 UICollectionView 并使其水平滑动
如何使 UICollectionView 像书一样翻转整个页面