【问题标题】:How to show / hide custom view depending the contentOffset of my tableview?如何根据我的 tableview 的 contentOffset 显示/隐藏自定义视图?
【发布时间】: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 吗?

标签: ios swift uitableview uiscrollview


【解决方案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
          }
      }
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-26
        相关资源
        最近更新 更多