CollectionView 仅在 SVPullToRefresh 上刷新,不在 .reloadData 上刷新

Posted

技术标签:

【中文标题】CollectionView 仅在 SVPullToRefresh 上刷新,不在 .reloadData 上刷新【英文标题】:CollectionView Only refreshes on SVPullToRefresh, not on .reloadData 【发布时间】:2014-11-18 20:02:33 【问题描述】:

在调用URBMediaFocusViewController 后,我正在尝试重新加载我的 collectionView 中的数据 无论我尝试什么,我都无法让我的 collectionView 重新加载。在关闭 URB 时,我调用了一个自定义类 func refreshAfterURB () 我一直在尝试加载这么多不同的东西来尝试刷新,但没有任何进展。当我使用println(self.collectionView?) 打印我的collectionView 时,它返回nil。这应该没有理由,所以我尝试使用

完全刷新我的视图控制器
func refreshAfterURB () 
        self.view.setNeedsDisplay()
        self.view.setNeedsLayout()
        self.view.setNeedsUpdateConstraints()
        self.collectionView?.reloadData()
    

但这不会刷新我的collectionView,它甚至不会重新加载我认为的视图,因为它保持当前滚动位置,但之后它将打印collectionView。

我需要能够在此命令中或以类似的方式刷新我的 collectionView。

我成功的唯一方法是使用我这样设置的 SVPullToRefresh:

self.collectionView.addPullToRefreshWithActionHandler(
            println(self.collectionView?)
            self.refresh()
        , position: SVPullToRefreshPosition.Bottom)

知道这行得通,我尝试了以下方法,但也没有运气。

    var instanceOfCustomObject: UIScrollView = UIScrollView()
    self.collectionView?.triggerPullToRefresh()

我的 CollectionView 是这样设置的:

var collectionView: UICollectionView!

_

func setUpCollection () 

    layout.sectionInset = UIEdgeInsetsMake(2, 2, 2, 2);
    layout.headerHeight = 0;
    layout.footerHeight = 0;
    layout.columnCount = numOfColums
    layout.minimumColumnSpacing = 2;
    layout.minimumInteritemSpacing = 2;
    self.collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
    self.collectionView.dataSource = self
    self.collectionView.delegate = self
    self.collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
    self.collectionView.backgroundColor = offWhite
    self.collectionView.frame = CGRectMake(0, 64, screenSize.width, screenSize.height - 64)
    self.view.addSubview(self.collectionView)


    self.collectionView.addPullToRefreshWithActionHandler(
            println(self.collectionView?)
            self.refresh()
        , position: SVPullToRefreshPosition.Bottom)


那么如何在函数中刷新我的 collectionView 而无需向下滑动来刷新?

如有任何关于我的代码的其他问题,请随时提出。

更新:

我添加了几行以找出答案;

1) 在调用重新加载数据之前,我会打印新的数组计数 (60)

2) 在 cellForItemAtIndexPath 中,它只打印 (30) 用于数组的计数

更新 #2

在读取 plist 之前调用 reload data

【问题讨论】:

前四行在哪里被调用?来自方法或完成处理程序? 在我的refreshAfterURB() 我编辑了我的问题 【参考方案1】:

这一切都归结为它在读取数据之前重新加载数据。就我而言,它就像放

一样简单
self.collectionView?.reloadData()
self.collectionView?.layoutIfNeeded()

在我的readPlist()末尾

在这种情况下,我建议其他任何人在几个地方打印出数组的计数,以确保在重新加载之前正确填满。

【讨论】:

以上是关于CollectionView 仅在 SVPullToRefresh 上刷新,不在 .reloadData 上刷新的主要内容,如果未能解决你的问题,请参考以下文章

识别 CollectionView 中的单元格

如何在collectionView中重新加载补充视图

swift 2中Collectionview多个部分的不同滚动方向

在 UICollectionView 滚动了一定距离后调用函数 Objective-C

CollectionView 中的 CollectionView:使用 didSelectItemAt 执行Segue

为啥 CollectionView 单元格内部其他 collectionView 的大小错误?