我有一个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 ?
}
}