【问题标题】:Scroll action on tableview在 tableview 上滚动操作
【发布时间】:2019-05-16 09:12:01
【问题描述】:

我正在使用这个函数来检测是否在 tableView 上应用了向上/向下滚动动作。出于某种原因,它只检测向上滚动而不是向下滚动。有任何想法吗?

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    tableView.reloadData()

    DispatchQueue.main.async {

        if targetContentOffset.pointee.y < scrollView.contentOffset.y {
            print("go up")
            print(self.currentRow)
            self.tableView.scrollToRow(at: NSIndexPath(row: self.currentRow-1, section: 0) as IndexPath, at: UITableView.ScrollPosition.top, animated: true)

        } else {
            print("go down")
            print(self.currentRow)
            self.tableView.scrollToRow(at: NSIndexPath(row: self.currentRow+1, section: 0) as IndexPath, at: UITableView.ScrollPosition.top, animated: true)
            self.currentRow += 1
        }
    }
}

【问题讨论】:

    标签: ios swift uitableview scroll uiscrollview


    【解决方案1】:

    scrollViewWillEndDragging 在用户完成滚动内容时告诉代理。

    尝试使用这个功能:

     var current:CGFloat = 0
     func scrollViewWillBeginDragging(scrollView: UIScrollView) {
        self.current = scrollView.contentOffset.y
     }
    
     func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let contentOffset = scrollView.contentOffset.y
        if contentOffset > current {
            print("go up")
        }else if current > contentOffset{
            print("go down")
        }else{//
        }
     }
    

    【讨论】:

      【解决方案2】:

      只需记录 scrollViewDidScroll 委托之外的最后一个偏移量,并检查当前偏移量是大于还是小于该值。

      var lastOffset: CGFloat = 0
      
      func scrollViewDidScroll(_ scrollView: UIScrollView) {
      
          let offset = scrollView.contentOffset.y
      
          if offset < lastOffset { // check offset difference
              NSLog("user is scrolling up")
          } else {
              NSLog("user is scrolling down")
          }
          lastOffset = offset // record last offset
      
      }
      

      我使用NSLog 打印到控制台以添加时间戳,以便您可以看到它在长滚动时触发。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多