我正在创建集合视图。我在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()
识别它的方式更改单元格的位置和大小。
答案 0 :(得分:1)
您之所以看到这一点,是因为UICollectionView
并未使用实际的视图层次结构来回答您提出的问题。 UICollectionView
有一个布局对象,名称为UICollectionViewLayout
。默认布局对象为UICollectionViewFlowLayout
。当您在某个点要求单元格时,它会使用布局对象提供的信息。
这里有重要的一点:如果你想要以不同于Flow Layout的方式定位单元格,你需要将它子类化或基类并实现自己的布局方法。或者,您可以将默认的Flow Layout对象与更改同步。我不确定。
这不是一件轻而易举的事,我也没有一个简单易用的解决方案来满足您的需求。您必须完成它并随时提出具体问题。 Here是一个将Flow Layout子类化为允许重新排序的示例,这可能对您有所帮助。