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 上刷新的主要内容,如果未能解决你的问题,请参考以下文章
swift 2中Collectionview多个部分的不同滚动方向
在 UICollectionView 滚动了一定距离后调用函数 Objective-C