UICollectionView 在顶部加载项目 - 加载更多选项

Posted

技术标签:

【中文标题】UICollectionView 在顶部加载项目 - 加载更多选项【英文标题】:UICollectionView load items on top - load more option 【发布时间】:2016-08-08 17:03:06 【问题描述】:

我用meteor-ios构建消息应用程序,一切都很顺利,但我正在尝试加载更多功能,但我无法维护/保存滚动视图的位置(当我滚动到顶部时,我想加载更多项目,但滚动视图保持与插入之前相同的位置)

我的代码:

func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) 



    if type == NSFetchedResultsChangeType.Insert 

        self.blockOperations.append(
            NSBlockOperation(block:  [weak self] in
                if let this = self 

                    this.collectionView!.insertItemsAtIndexPaths([newIndexPath!])

                
                )
        )
    
    else if type == NSFetchedResultsChangeType.Update 
        self.blockOperations.append(
            NSBlockOperation(block:  [weak self] in
                if let this = self 


                    this.collectionView!.reloadItemsAtIndexPaths([indexPath!])
                
                )
        )
    
    else if type == NSFetchedResultsChangeType.Move 

        self.blockOperations.append(
            NSBlockOperation(block:  [weak self] in
                if let this = self 
                    this.collectionView!.moveItemAtIndexPath(indexPath!, toIndexPath: newIndexPath!)
                
                )
        )
    
    else if type == NSFetchedResultsChangeType.Delete 

        self.blockOperations.append(
            NSBlockOperation(block:  [weak self] in
                if let this = self 
                    this.collectionView!.deleteItemsAtIndexPaths([indexPath!])
                
                )
        )
    





 self.collectionView!.performBatchUpdates( () -> Void in
            for operation: NSBlockOperation in self.blockOperations 
                operation.start()
            
            , completion:  (finished) -> Void in
                self.blockOperations.removeAll(keepCapacity: false)


        )

我正在使用核心数据和meteor-ios。那些谁知道我能做什么?我还尝试了how to set UITableView's scroll position to previous location when click "load earlier items" button 任何其他方法都没有成功:(

非常感谢!!

【问题讨论】:

嗨,你解决了吗? 【参考方案1】:

是的,我在 contentOffset.y 范围内做了 20-50 之间的 if 语句。如果它在这些值之间,则调用 loadMore() 一次。

使 bool 值保存 isLoadFinish 并等待单元格更新。如果您不这样做, loadMore() 将调用多次。

对于 UX 体验,您必须在调用 loadMore() 之前保存旧的 contentOffset.y 并在加载后将其重置。

我需要对其进行很多改进,现在只是简单的 hack。

祝你好运。

【讨论】:

给我们一些可解释的代码,我和你一样尝试过,但不起作用

以上是关于UICollectionView 在顶部加载项目 - 加载更多选项的主要内容,如果未能解决你的问题,请参考以下文章

向 UICollectionview 添加一个顶部标题,该标题已经包含带有标题的部分

uicollectionview 在重新加载数据后立即选择一个项目?

首次加载后如何在 UICollectionView 中选择一些项目?

UICollectionView 在包含标题时不会重新加载项目

在出现之前重新加载 UICollectionView 而不让用户看到更改

如何在顶部 UICollectionView 上制作粘性标题