如何根据我的 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】:

尝试此代码根据UIscrollviewcontentOffset隐藏/显示自定义视图

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 移动得更流畅,如何?

如何根据 tableview 选择更改按钮的功能?

如何根据 tableView 的滚动速度控制函数是不是发生

JavaFX,如何冻结TableView中某些列的位置