2016-09-23 60 views
1

我有一个UICollectionViewController(嵌入在NavigationViewController),其通过某些部分水平地滚动一个UICollectionView经由寻呼:嵌套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)通过一些UICollectionViewCells垂直滚动。

的UICollectionViewController里面,我设置

navigationController?.hidesBarsOnSwipe = true 

这是因为世界上只有一个UICollectionView只要工作。但由于(顶部)CollectionView水平滚动并且包含垂直滚动的额外(Sub)CollectionView,因此此功能似乎不再有效。

我想NavigationBar隐藏(Sub)CollectionView垂直滚动时。有没有什么黑客来实现这一目标?

+0

你有没有找到任何解决办法了吗? – pkc456

回答

0

你可以尝试这样的(雨燕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 ? 
    } 
} 
+1

这非常接近我想达到的目的......不幸的是,隐藏/显示动画的速度与滚动速度不同步,即由于“setNavigationBarHidden”速度似乎已修复,NavBar隐藏甚至在CollectionView滚动一点之后,感觉有点奇怪。 感谢您的意见! –

+0

El_Chippo你有没有得到确切的解决方案,你在找什么? –