带有自定义单元格框架的

时间:2015-09-29 15:49:23

标签: ios swift uicollectionview uicollectionviewcell

我正在创建集合视图。我在CollectionViewController中更改了单元格的大小和位置:

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath 
indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(
reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell

然后为每个项目更改cell.frame

        cell.frame = CGRectMake(x , y, width, height)

这一切都很好但是在使用手势识别器时,我想使用collectionView.indexPathForItemAtPoint()识别单元格。

collectionView.indexPathForItemAtPoint(),无法识别我对单元格大小和位置所做的更改并返回nil。它仅在我从(不可见)原始位置拖动时起作用。我找到了解决方案,包括手动遍历所有单元格,但我仍然想知道是否有可能以collectionView.indexPathForItemAtPoint()识别它的方式更改单元格的位置和大小。

1 个答案:

答案 0 :(得分:1)

您之所以看到这一点,是因为UICollectionView并未使用实际的视图层次结构来回答您提出的问题。 UICollectionView有一个布局对象,名称为UICollectionViewLayout。默认布局对象为UICollectionViewFlowLayout。当您在某个点要求单元格时,它会使用布局对象提供的信息。

这里有重要的一点:如果你想要以不同于Flow Layout的方式定位单元格,你需要将它子类化或基类并实现自己的布局方法。或者,您可以将默认的Flow Layout对象与更改同步。我不确定。

这不是一件轻而易举的事,我也没有一个简单易用的解决方案来满足您的需求。您必须完成它并随时提出具体问题。 Here是一个将Flow Layout子类化为允许重新排序的示例,这可能对您有所帮助。

相关问题