CollectionViews的reloadData vs insertItemAtIndexPaths

时间:2016-04-04 07:34:56

标签: swift uicollectionview

我已经实施了scrollViewWillEndDragging委托方法,因此我可以向myCollectionView添加新的单元格,其中myCollectionView目前只显示一个collectionViewCell。如果用户到达目的地,我希望用户滚动“进入”新单元格,以便当用户向左滑动时,将创建一个新单元格,并且UI将以该新单元格为中心。

要做到这一点,我已经以两种方式实现了它

第一种方式(使用insertItemsAtIndexPaths):

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
        // calculate the page, which is the current cell we are on
        if (page == dataSource.count) {

            // Update data source
            let placeholderFlashCardProxy = FlashCardProxy(phrase: nil, pronunciation: nil, definition: nil)
            dataSource.append(placeholderFlashCardProxy)

            // Update collection view controller
            let newIndexPath = NSIndexPath(forItem: addedCards.count -1 , inSection: 0)
            myCollectionView.insertItemsAtIndexPaths([newIndexPath])

        }
        print("Centering on new cell")
        // Center the cardCollectionView on the new page
        let newOffset = CGFloat(page * Int((cellWidth + cellPadding)))
        targetContentOffset.memory.x = newOffset

}

插入新项目的问题是UI在创建新单元格时不会居中。

第二种方式(使用reloadData)

 func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
            // calculate the page, which is the current cell we are on
        if (page == dataSource.count) {

            // Update data source
            let placeholderFlashCardProxy = FlashCardProxy(phrase: nil, pronunciation: nil, definition: nil)
            dataSource.append(placeholderFlashCardProxy)

            // Update collection view controller
            myCollectionView.reloadData()

        }
        print("Centering on new cell")
        // Center the cardCollectionView on the new page
        let newOffset = CGFloat(page * Int((cellWidth + cellPadding)))
        targetContentOffset.memory.x = newOffset

}

使用reloadData()方法我将UI置于新创建的单元格中,尽管我不知道为什么。我打印了两种方法的偏移量,它们都是相同的,尽管使用insertItemsAtIndexPath似乎并没有将UI置于新创建的单元格中心,尽管偏移量与使用reloadData()相同。谁能告诉我为什么会这样?我问这个的原因是因为我想覆盖动画以添加新的collectionViewCell

0 个答案:

没有答案