我有一个UICollectionViewController(嵌入在一个NavigationViewController中),它通过分页来水平滚动UICollectionView:

if let flowLayout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout {
        flowLayout.scrollDirection = .horizontal
        flowLayout.minimumLineSpacing = 0
}

collectionView?.backgroundColor = .white
collectionView?.register(FeedCell.self, forCellWithReuseIdentifier: cellId)
//collectionView?.contentInset = UIEdgeInsetsMake(MenuBar.height, 0, 0, 0)
//collectionView?.scrollIndicatorInsets = UIEdgeInsetsMake(MenuBar.height, 0, 0, 0)
collectionView?.isPagingEnabled = true

每个部分或页面都包含另一个UICollectionView(在FeedCell中),该视图在某些uiCollectionViewCell中垂直滚动。
在UICollectionViewController中,我设置
navigationController?.hidesBarsOnSwipe = true

只要只有一个UICollectionView就可以了。但是,由于(顶部)CollectionView水平滚动,并且包含其他(子)CollectionView垂直滚动,因此此功能似乎不再工作。
我希望在(子)CollectionView垂直滚动时隐藏导航栏。有什么技巧可以达到这个目的吗?

最佳答案

您可以尝试这样的代码(Swift 3.0):

extension ViewController: UICollectionViewDelegate {
  func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let isScrollingUp = scrollView.contentOffset.y - lastY > 0
    lastY = scrollView.contentOffset.y
    self.navigationController?.setNavigationBarHidden(isScrollingUp, animated: true)
  }

  func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    if !decelerate {
      // show navigation bar ?
    }
  }

  func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    // show navigationBar ?
  }
}

07-28 01:31