ios - 具有自定义单元格框架的 indexPathForItemAtPoint

标签 ios swift uicollectionview uicollectionviewcell

我正在创建 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/

相关文章:

ios - 您必须年满 18 岁才能在 App Store 上发布应用程序吗?

ios - CoreData - 在后台上下文中删除对象时的不一致行为(附加测试项目)

ios - Google 标签管理器错误

arrays - 在 Swift 中拆分具有多个字符的字符串

ios - 如何知道在 swift 4 中实时 firebase 的 childChanged 事件类型中更新了哪个子子

ios - 带有两个动态标签和自动布局的 UICollectionViewCell 动态高度

objective-c - 在 iOS 中创建 PDF 注释

json - Swift 4 - 访问 Codable 结构的通用 Json 对象

ios - 由于下载延迟,数组超出索引

ios - 如何避免一次在 UICollectionview 中进行两个选择