加载N个UICollectionView视图并在最后重新加载

[回复后编辑:问题末尾的解决方案]

我有一个UICollectionView,最初我在其中加载4个视图。我希望当用户滚动到最后一个(第四视图)并尝试再次滚动时,我更新模型的数据,重新加载UICollectionView并移回第一视图,以便用户可以再次滚动3次,直到第四视图等

问题在于,当我最初加载4个视图时,用户到达最后一个视图后无法滚动,因为之后没有任何内容。因此,我在第5个视图中创建了一个空单元格,现在在初始UICollectionView中加载5个视图。但是第5个视图永远不会完全显示,我使用“ willDisplay”方法重新加载数据并强制移回第一个视图。这不是很优雅,但是我找不到另一种方法。

此方法运行良好,但问题出在这里:似乎在调用willDisplay时,我确实重新加载了数据并移回到第一个视图,但是只有到那时,才应该将我带到第五个视图考虑到这意味着在我移回到第一个视图之后,该应用程序实际上向我显示了第二个视图(它确实移回到了第一个视图,但是随后应用了我最初从第4个视图转到第5个视图的滚动条,我进入第二视图)。

我希望这很清楚...

这是我正在使用的代码:

override func collectionView(_ collectionView: UICollectionView,willDisplay cell: UICollectionViewCell,forItemAt indexPath: IndexPath) { 
// if this is the last view       
if((indexPath.row == self.dataModel.getNumberOfData()) && self.dataModel.getNumberOfData() > 0) 
{

// I update the model here
self.dataModel.resetData()
// Then I reload the UICollectionView
self.collectionView.reloadData()
// Then I move back to the first view
self.collectionView.selectItem(at: IndexPath(item: 0,section: 0),animated: false,scrollPosition: .centeredHorizontally)
}
}

当然,如果您还有其他更优雅的解决方案,可以避免使用第5种观点,那么我很乐意考虑一下。我的数据不是静态的,因此当我需要重新加载新数据时,我查询数据库以检索新信息,因此在运行应用程序时我不知道新数据。

谢谢。

[使用scrollViewDidScroll解决方案进行编辑。例如,我展示了如何检测结尾(水平滚动并删除第一个视图...

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
// if reached the end of the UICollectionView...
if (scrollView.contentOffset.x == scrollView.contentSize.width - scrollView.frame.size.width) {
print("Reached the end...")
self.dataModel.removeNFirst(n: 1) // remove first item from model
// delete the first view of the UICollectionView
self.collectionView.performBatchUpdates({
                self.collectionView.deleteItems(at: [IndexPath(item: 0,section: 0)])
            }) { (finished) in
                self.collectionView.reloadData()
            }
 }
}
azsxdcf951357 回答:加载N个UICollectionView视图并在最后重新加载

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3170118.html

大家都在问