当用户向下滚动时,材质浮动操作按钮应该不可见,向上滚动时应该可见
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
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
【讨论】:
@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
【讨论】:
以上是关于当用户向下滚动时,材质浮动操作按钮应该不可见,向上滚动时应该可见的主要内容,如果未能解决你的问题,请参考以下文章