Tableview scrollToRow(at:at:animated) 导致多次调用 scrollViewDidScroll(_)

Tableview scrollToRow(at:at:animated) causing scrollViewDidScroll(_) to be called multiple times

我已经检查了所有关于为什么我的 UITableView 一整天都表现如此奇怪的可能性。最后,现在我注意到了一些奇怪的事情。我需要一些帮助来确定我注意到的是否属实,或者问题可能出在其他地方。

所以在 tableView(_:didSelectRowAt:) 中,我想在调整所有单元格的高度后滚动到特定单元格。 (我正在增加所有单元格的高度。)

这是我的 scrollViewDidScroll(_) 方法主体的一小部分相关部分,负责确定屏幕部分的哪一部分被点击(我需要它才能让其他一些东西起作用):

public func scrollViewDidScroll(_ scrollView: UIScrollView) {        
   let touchLocation = scrollView.panGestureRecognizer.location(in: containerView)
   let touchX = touchLocation.x
   print("X: \(touchX)")
  .
  .
  .
}

现在在我的 didSelectRowAt 中,当我将 scrollToRow 调用为:

tableView.scrollToRow(at: indexPath, at: .top, animated: false)

我得到这个作为输出:

X: 132.0 (old touch x)
X: 130.66665649414062 (old touch x when scrolling stopped)
X: 188.66665649414062 (new touch x of tap)
X: 188.66665649414062 (not sure why this was printed again)

但是现在当我执行 scrollToRow 时:

tableView.scrollToRow(at: indexPath, at: .top, animated: true)

X: 160.3333282470703
X: 160.3333282470703 (new touch x of tap)
X: 177.66665649414062
X: 177.66665649414062
X: 177.66665649414062
X: 177.66665649414062
X: 177.66665649414062
X: 177.66665649414062
X: 177.66665649414062
X: 177.66665649414062
X: 177.66665649414062
X: 177.66665649414062
.
.
.
174 times .
.
.
X: 177.66665649414062

这很奇怪。有人可以解释为什么会这样吗?

您可以在 https://github.com/parthv21/DeepScroll

获取代码

抱歉之前的回答。 也许这会有所帮助, scrollViewDidScroll 每次滚动 tableview 时,可能你必须使用 scrollViewDidEndDraggingscrollViewWillBeginDeceleratingscrollViewDidEndDecelerating

scrollViewDidScroll 在滚动视图滚动的每一帧都会被调用,不管它是由用户完成的还是通过调用 scrollTo 方法完成的。我认为,当用户滚动时,这最多可以达到每秒 120 次。

如果您想在滚动视图停止时执行某些操作,您应该使用 didEndDecceleratingdidEndScrollingAnimation 委托方法。