在reloadData之后隐藏UICollectionView内容

dat*_*elk 5 iphone cocoa-touch objective-c ios uicollectionview

我有一个UICollectionView显示来自的内容NSFetchedResultsController.collectionView有一个部分,在该部分中有一个标题.标头允许用户过滤集合视图中的内容.标题视图的委托连接到UIViewController包含集合视图.

一旦用户更改其中一个过滤器选项,标题视图就会向其委托发出消息.委托变化对谓词fetchRequestNSFetchedResultsController和电话-[NSFetchedResultsController performFetch:].接下来,必须通知集合视图内容已更改.这可以通过多种方式完成,但我喜欢的方式是通过调用-[UICollectionView reloadData].不幸的是,这种方法不能像预期的那样工作:当我调用这个方法时,整个集合视图就会消失.以下是我就此问题所做的一些观察:

  1. 所有单元格和第一个(也是唯一的)部分的标题都将其hidden标志设置为YES.我尝试通过设置符号断点来跟踪导致此问题的方法-[UIView setHidden:].不幸的是,它从未打破UICollectionView子视图.
  2. collectionView:cellForItemAtIndexPath:在打电话后从未打过电话-[UICollectionView reloadData].
  3. collectionView:viewForSupplementaryElementOfKind:atIndexPath:在打电话后从未打过电话-[UICollectionView reloadData].
  4. numberOfSectionsInCollectionView: 仍然被调用并仍然返回正确的数字(在这种情况下为1).
  5. collectionView:numberOfItemsInSection 仍然被调用并仍然返回正确的数字(在这种情况下为1).

到目前为止我尝试过解决这个问题的方法:

  1. 禁用实例上的所有自定义(sectionInset,itemSize)UICollectionViewFlowLayout
  2. 禁用实例separatorInset上的所有自定义()UICollectionView
  3. 将标题添加为子视图UICollectionView并相应地进行设置contentInset.不幸的是UICollectionView,当我这样做时,不喜欢我的自动布局约束和崩溃.
  4. 打电话[UICollectionView reloadSections:]而不是[UICollectionView reloadData].这有效,但我不喜欢动画.
  5. 在第一部分中手动插入,删除和更新行.只要包含集合视图的视图控制器在内存中,这就可以工作.一旦解除分配,应用程序就会因断言失败而崩溃-[UICollectionView dealloc].

以这种方式设置标头感觉不对,但遗憾的UICollectionView是没有像UITableView(tableHeaderView)这样的全局标头.

Yah*_*hia 5

尝试在主线程中重新加载它们

dispatch_async(dispatch_get_main_queue(), ^{
[self.collectionView reloadData];
});
Run Code Online (Sandbox Code Playgroud)

它对我有用