我正在创建 Collection View 。我在 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()
能够识别的方式更改单元格的位置和大小。
最佳答案
你看到这个的原因是因为 UICollectionView
没有使用实际的 View 层次来回答你问的问题。 UICollectionView
有一个布局对象,恰本地命名为 UICollectionViewLayout
.默认布局对象是 UICollectionViewFlowLayout
。当您在某个点请求单元格时,它会使用布局对象提供的信息。
重要的一点是:如果您想以不同于 Flow Layout 的方式定位单元格,您需要对其或基类进行子类化并实现您自己的布局方法。或者,您可以获得与您的更改同步的默认流布局对象。我不知道。
这不是微不足道的,而且我没有一个简单的开箱即用的解决方案来满足您的需求。你必须仔细研究它并在进行时提出具体问题。 Here是一个子类化 Flow Layout 以允许重新排序的示例,这可能对您有所帮助。
关于ios - 具有自定义单元格框架的 indexPathForItemAtPoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32848458/