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

Posted

技术标签:

【中文标题】当用户向下滚动时,材质浮动操作按钮应该不可见,向上滚动时应该可见【英文标题】:Material floating action button should invisible when user scroll down and visible when scrolls up 【发布时间】:2019-06-27 09:22:54 【问题描述】:

我在屏幕右下方有材质浮动操作按钮 (FAB)。 另外,我在 View 中有 CollectionView。我希望完成以下操作。

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

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

【问题讨论】:

【参考方案1】:

别忘了设置collectionView.delegate = self。

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

50Y 的位置,按钮将从该位置隐藏。您可以根据您的要求调整到任何数字。


另一种方法

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

【讨论】:

@Eswar 很高兴它有帮助。不要忘记投票并接受答案。谢谢 按钮隐藏效果很好。但是 - 按钮仅在显示第一个单元格时才可见。如果用户向上滚动而不考虑单元格计数,我希望它显示出来。 您可以根据自己的要求更改值50 我不想给出任何静态值。我只需要知道用户是向上还是向下滚动。如果 UP - 按钮应该可见,如果 DOWN - 按钮应该隐藏。我怎样才能做到这一点? @Eswar 以另一种方式添加。【参考方案2】:

您可以为此使用 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

【讨论】:

当我尝试您的代码时 - 引发此错误“'ViewController' 类型的值没有成员'lastContentOffset'”。 对不起。我忘了添加这个。 lastContentOffset 是一个简单的 CGFloat 变量。您应该在代码中的某处添加它。 (就像这个 var lastContentOffset : CGFloat = 0)【参考方案3】:

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

    调用方法 ---> func scrollViewWillEndDragging 调用动画的方法 --> func setView

【讨论】:

请在这里写下你的代码,而不是上传图片,这样其他人可以复制粘贴并测试你的代码,然后很容易评估 是的,下次我将粘贴代码对不起,现在【参考方案4】:

这是上面的代码。

 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

【讨论】:

以上是关于当用户向下滚动时,材质浮动操作按钮应该不可见,向上滚动时应该可见的主要内容,如果未能解决你的问题,请参考以下文章

向上滚动和向下滚动时导航按钮的颜色变化

在 RecyclerView 中滚动时不可见的项目变得可见

当用户向下滚动后向上滚动时,如何在表格视图中显示搜索框?

Android:向上滚动时显示工具栏(向上拖动),向下滚动时隐藏(向下拖动)

Objective c - 表格视图内的按钮防止表格滚动

excel VBA如何制作浮动按钮?