如何在滚动时隐藏并显示带有动画效果的标题视图

时间:2018-02-28 08:00:34

标签: ios objective-c animation uiview uicollectionview

我在尝试实现隐藏并在滚动收藏视图时显示像facebook这样的慢动画的标题视图。

图片:

enter image description here

我的代码:

if (currentContentOffset > self.previousContentOffset) {


    heightConstraintView.constant = 0;
    HeaderView.hidden = YES;

} else if (currentContentOffset < self.previousContentOffset) {

    heightConstraintView.constant = 57;
    HeaderView.hidden = NO;
}

3 个答案:

答案 0 :(得分:1)

您可以使用UIView原生动画方法。请注意self.view.layoutIfNeeded是必要的。对取消隐藏您的观点

执行相同操作
heightConstraintView.constant = 57;
UIView.animate(withDuration: 0.25, animations: {
                HeaderView.hidden = NO;
                self.view.layoutIfNeeded()
            })

答案 1 :(得分:0)

如果你正在使用collectionView,那么我建议使用像View这样的导航栏作为collectionView本身的headerView,这是我如何做的,当我使用需要完成类似的东西时:

使用委托方法:

func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 2
    }

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    if section != 0 {
    return pageControl.numberOfPages
    }
    return 0 //so no cells are displayed for this header, remember to do the same for sizeForItemAtIndex and CellForItemAtIndex too
}

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {

    if indexPath.section == 0{
        //add your custom navigation bar like View here
    }
      return UICollectionReusableView()
}

在这种方法中,滚动时标题视图的动画将由集合视图本身处理,并且只有在您向上移动时才会再次显示。

答案 2 :(得分:0)

如果您使用navigationBar,则很容易实现。 iOS为UINavigationController提供了一个掩盖一些复杂行为的简单属性。如果您为任何hidesBarsOnSwipe设置trueUINavigationController,则iOS会自动为您的视图添加点按手势识别器,以根据需要处理隐藏(并显示)导航栏。这意味着您可以在viewDidAppear中的一行代码中模仿Safari的导航栏行为,如下所示:

self.navigationController?.hidesBarsOnTap = true