在加载 collection 视图时隐藏 header

hide header while collection view is loading

我正在使用 NVActivityIndicatorView 加载动画。 我有这些功能来添加和删除 activity 指标。

func addActivityIndicator() {}
func startActivityIndicatorView() {}
func stopActivityIndicatorView() {}

我在

中实现了 header
override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
   let headerView = ...
   return headerView 
}

我的问题是 header 在加载 collectionView 时可见。我想在 collectionView 加载时隐藏它。

您可能在指示器动画时执行一些异步操作,因此您应该通过调用 reloadData 让 collection 视图知道操作已完成,因此它会 re-layout它的 UI 元素包括 headers 通过 viewForSupplementaryElementOfKind:

首先,如果指标在屏幕上,您需要从 collectionView:layout:referenceSizeForHeaderInSection return CGSize.zero,这样 header 就不会被填充:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
  if indicatorView.isAnimating { 
    return CGSize.zero
  } else {
    return CGSize(width: collectionView.frame.width, height: 50)
  }
}

那么无论你把activity指标隐藏在哪里(可能在异步操作的完成块中),你应该调用collectionView.reloadData所以viewForSupplementaryElementOfKind 将再次调用:

// operation is done, refreshing the content..
self.stopActivityIndicatorView()
self.collectionView.reloadData() 
...