繁体   English   中英

UICollectionView内容在reloadData之后被隐藏

[英]UICollectionView content is hidden after reloadData

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

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

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

到目前为止,我为解决该问题所做的尝试:

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

用这种方式设置标头感觉不对,但是不幸的是, UICollectionView没有像UITableViewtableHeaderView )这样的全局标头。

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

dispatch_async(dispatch_get_main_queue(), ^{
[self.collectionView reloadData];
});

它对我有用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM