【问题标题】:How to get indexPath of new center UICollectionViewCell after one has been deleted?删除后如何获取新中心 UICollectionViewCell 的 indexPath?
【发布时间】:2019-05-08 16:15:21
【问题描述】:

我有一个名为 postsCollectionView 的水平 collectionView,其中每个都与屏幕一样宽。目前我正在计算 currentPost 的 indexPath:

let currentPostIndex = Int(self.postsCollectionView.contentOffset.x / self.postsCollectionView.frame.size.width)
let currentPostIndexPath = IndexPath(row: currentPostIndex, section: 0)

当帖子被删除并且我重置了“currentPost”时,我的视图控制器中有这个 hacky 方法:

 func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
        if (postsFetchedResultsController.fetchedObjects?.count)! > 0 {
            print(postsCollectionView.indexPathsForVisibleItems,postsCollectionView.contentOffset.x) //prints [],375.0
            //HACK
            DispatchQueue.main.asyncAfter(deadline: .now() + 1) { // change 2 to desired number of seconds
                let currentPostIndex = Int(self.postsCollectionView.contentOffset.x / self.postsCollectionView.frame.size.width)
                let currentPostIndexPath = IndexPath(row: currentPostIndex, section: 0)
                self.currentPost = self.postsFetchedResultsController.object(at: currentPostIndexPath)
            }
        } else {
            print("no items left")
        }
    }

基本上有一个 NSFetchedResultsController 会在数据源发生变化时调用 collectionView 的 deleteItem 方法。我正在使用回调 didEndDisplaying 单元格试图 - 当单元格被完全删除时,将 self.currentPost 设置为现在显示的已取代它的帖子。

问题是这个回调被调用我认为当单元格被删除时,但动画还没有完成,所以它仍然偏移 375(屏幕的宽度),所以它计算当前索引路径为 1,即使它应该是 0,因为现在 collectionView 中只有 1 个帖子。

有没有办法等到动画也完成?或者有没有更好的方法来计算中心的集合视图单元格的新 indexPath 被删除后?

【问题讨论】:

    标签: ios swift uicollectionview


    【解决方案1】:

    1) 为什么不将 currentPost 设置为 nil 并在实际需要时重新计算它,而不是在删除单元格后立即重新计算

    2) 您可以使用 UICollectionView.indexPathForItem(at point: CGPoint) 来获取您的 IndexPath。它可能更安全一些。我想你传递的点是

    CGPoint(x:self.postsCollectionView.contentOffset.x, y:0) 
    

    y 位置取决于您在集合视图中放置单元格的方式。

    如果您立即需要结果。您知道删除前的当前索引。如果要删除的单元格的索引小于或等于该索引,则增加当前索引,如果已删除单元格的索引更大,则不要更改它。

    【讨论】:

    • 但我确实需要它。我需要用注释更新一个附加视图,以便注释与现在显示的标签相对应。你认为我会如何计算分数?如果我只是使用中心点,那会不会面临在动画完成之前被调用的同样问题?
    • 还有一条关于立即计算当前索引的评论
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多