在tableview上滚动动作

时间:2018-12-15 08:46:27

标签: ios swift uitableview scroll uiscrollview

我正在使用此功能来检测是否在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
        }
    }
}

2 个答案:

答案 0 :(得分: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{//
    }
 }

答案 1 :(得分:1)

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

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 } 打印到控制台以添加时间戳记,以便长时间滚动时可以看到它。