如何根据我的 tableview 的 contentOffset 显示/隐藏自定义视图?
Posted
技术标签:
【中文标题】如何根据我的 tableview 的 contentOffset 显示/隐藏自定义视图?【英文标题】:How to show / hide custom view depending the contentOffset of my tableview? 【发布时间】:2019-02-12 10:29:21 【问题描述】:我有一个聊天应用程序,我试图在用户滚动到顶部时显示我创建的自定义视图,如果它位于 tableview 的底部,也将其隐藏。 (就像whatsapp一样)
说实话,我正在为显示/隐藏按钮的逻辑而苦苦挣扎。 尝试在我重新加载数据后立即保存我的 tableview 的 contentOffset.y,这样我就知道这是底部,如果它更小以显示自定义视图,但 mainTableView.contentOffset.y 它始终为 0。
func scrollViewWillBeginDragging(_ scrollView: UIScrollView)
if (scrollView == mainTableView)
print(mainTableView.contentOffset.y)
if let point = startingPointForView
//where var startingPointForView: CGFloat?
// and tried to save it after I reload the data
//self.startingPointForView = self.mainTableView.contentOffset.y
// but it's always 0
// Show and hide button logic
我正在努力实现的图像:https://imgur.com/ZkYEi2P
【问题讨论】:
我认为你可以使用 scrollViewDidEndScroll 吗? 【参考方案1】:尝试此代码根据UIscrollview
contentOffset
隐藏/显示自定义视图
func scrollViewDidScroll(_ scrollView: UIScrollView)
let scrollViewContentHeight = scrollView.contentSize.height
let scrollViewHeight = scrollView.frame.height
if scrollView.contentOffset.y < (scrollViewContentHeight - scrollViewHeight)
//Custom view show
else
//Custom view Hide
【讨论】:
【参考方案2】:也许这段代码会对你有所帮助
func scrollViewDidScroll(_ scrollView: UIScrollView)
if scrollView.panGestureRecognizer.translation(in: scrollView).y > 0
// down
button.isHidden = false
else
// up
button.isHidden = true
【讨论】:
【参考方案3】:对于希望在表格视图滚动时隐藏按钮的人可以使用以下代码:
var previousContentOffset: CGFloat = CGFloat()
扩展 YourViewController: UIScrollViewDelegate
func scrollViewDidScroll(_ scrollView: UIScrollView)
if scrollView == self.yourTableView
let currentContentOffset = scrollView.contentOffset.y
if (currentContentOffset > previousContentOffset)
// scrolling towards the bottom
if scrollView.contentOffset.y > 50
self.yourButton.isHidden = true
else
self.yourButton.isHidden = false
else if (currentContentOffset < previousContentOffset)
// scrolling towards the top
let maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height
// Change 10.0 to adjust the distance from bottom
if maximumOffset - currentContentOffset <= 10.0
self.yourButton.isHidden = true
else
self.yourButton.isHidden = false
previousContentOffset = currentContentOffset
【讨论】:
以上是关于如何根据我的 tableview 的 contentOffset 显示/隐藏自定义视图?的主要内容,如果未能解决你的问题,请参考以下文章
将 TableView 标题粘贴到顶部,导致当用户向下滚动时标题不“交互”
我可以通过减少调用 [CALayer LayoutSubviews] 来使我的 tableview 移动得更流畅,如何?