向下滚动以逐渐隐藏菜单栏或查看并向上滚动

时间:2018-07-05 02:23:08

标签: ios swift uiviewcontroller uicollectionview

我想在collectionview顶部创建一个菜单栏。当用户向下滚动时,菜单栏将逐渐隐藏,但是当用户向上滚动时,菜单栏将立即显示。该行为类似于导航栏的hidewhenswipe函数。在此菜单栏上创建这种行为的解决方案吗?谢谢。

[屏幕截图] 1

2 个答案:

答案 0 :(得分:2)

  1. 给标题视图一个高度限制(如果尚未给出)。然后连接该约束,例如

    @IBOutlet弱var headerViewHeightConstraint:NSLayoutConstraint!

  2. 确认您的ViewController为UICollectionViewDelegate和UIScrollViewDelegate

  3. 在ViewDidLoad()中设置collectionView.delegate = self

  4. UICollectionView是UIScrollView的子类,因此您可以覆盖 scrollViewDidScroll 的委托方法,并使用以下代码

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.y > 50 {// the value when you want the headerview to hide
        view.layoutIfNeeded()
        headerViewHeightConstraint.constant = 0
        UIView.animate(withDuration: 0.5, delay: 0, options: [.allowUserInteraction], animations: {
            self.view.layoutIfNeeded()
        }, completion: nil)
    
    }else {
        // expand the header
        view.layoutIfNeeded()
        headerViewHeightConstraint.constant = 100 // Your initial height of header view
        UIView.animate(withDuration: 0.5, delay: 0, options: [.allowUserInteraction], animations: {
            self.view.layoutIfNeeded()
        }, completion: nil)
     }
    }
    

答案 1 :(得分:0)

我一直在用HidingNavigationBarManager做你刚才描述的事情 而且非常容易使用。如果您的ViewController中有tableView,则 就像将这些行添加到代码中一样简单。

var hidingNavBarManager: HidingNavigationBarManager?
...
...
override func viewDidLoad() {
    super.viewDidLoad()
    self.hidingNavBarManager = HidingNavigationBarManager(viewController: self, scrollView: tableView)

  }