当用户向下滚动时,材质浮动操作按钮应该不可见,而当向上滚动时,则可见

时间:2019-06-27 09:22:54

标签: ios swift uicollectionview uiscrollview

我在屏幕的右下角有材料浮动操作按钮(FAB)。 另外,我在View内部有CollectionView。我希望执行以下操作。

  1. 当用户向下滚动时-FAB应该不可见。
  2. 当用户向上滚动时-FAB应该可见。

我在google中到处搜索。没有问题满足我的要求。

4 个答案:

答案 0 :(得分:0)

您可以为此使用scrollViewDidScroll。

     func scrollViewDidScroll(scrollView: UIScrollView!) {
    if (self.lastContentOffset > scrollView.contentOffset.y) {
        // show your button
    }
    else if (self.lastContentOffset < scrollView.contentOffset.y) { 
       // hide your button
    }

    // update the new position acquired
    self.lastContentOffset = scrollView.contentOffset.y
}

答案 1 :(得分:0)

不要忘记设置collectionView.delegate = self。

extension ViewController: UIScrollViewDelegate{
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if scrollView == collectoinView{
            button.isHidden = scrollView.contentOffset.y > 50
        }
    }
}

50 是按钮隐藏的 Y 位置。您可以根据需要调整为任何数字。


另一种方式

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

    let targetPoint = targetContentOffset as? CGPoint
    let currentPoint = scrollView.contentOffset

    if (targetPoint?.y ?? 0.0) > currentPoint.y {
        print("up")

    } else {
        print("down")
     }
}

使用第二种方法,无需提供静态值。第二种方法已从Objective-c Answer

转换为Swift

答案 2 :(得分:0)

https://i.stack.imgur.com/OQGGO.png

  1. 调用方法---> func scrollViewWillEndDragging
  2. 调用Animation的方法-> func setView

答案 3 :(得分:0)

这是上面的代码。

 func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
     moveDownButton.isHidden = false
    
    if targetContentOffset.pointee.y < scrollView.contentOffset.y {
        //Going up
        setView(view: self.moveDownButton, hidden: false)
    } else {
        //Going Down
        setView(view: self.moveDownButton, hidden: true)
    }
}

func setView(view: UIView, hidden: Bool) {
    view.isHidden = hidden
}