【问题标题】:Tableview scrollToRow(at:at:animated) causing scrollViewDidScroll(_) to be called multiple timesTableview scrollToRow(at:at:animated) 导致 scrollViewDidScroll(_) 被多次调用
【发布时间】:2019-11-15 06:31:05
【问题描述】:

我已经检查了为什么我的 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 (旧触摸 x)
X:130.66665649414062 (滚动停止时的旧触摸 x)
X:188.66665649414062 (新触摸 x 的点击)
X:188.66665649414062 (不知道为什么再次打印)

但是现在当我执行 scrollToRow 时:

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

X:160.3333282470703
X:160.3333282470703 (新的触摸 x 的点击)
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 次 .
.
.
X:177.66665649414062

这很奇怪。有人可以解释为什么会发生这种情况吗?

您可以在https://github.com/parthv21/DeepScroll获取代码

【问题讨论】:

    标签: ios swift uitableview uitableviewautomaticdimension


    【解决方案1】:

    scrollViewDidScroll 在滚动视图滚动的每一帧都被调用,不管是由用户完成还是调用 scrollTo 方法。我认为,当用户滚动时,这可能高达每秒 120 次。

    如果你想在滚动视图停止时做某事,你应该使用didEndDecceleratingdidEndScrollingAnimation委托方法。

    【讨论】:

    • 但是为什么每次都记得touch的X位置呢?有什么方法可以消费触摸事件,使X的下一次时间值为0?
    • 我猜它只有在拖动开始时才会重置。你想做什么?
    • 我解决了这个问题。感谢你的回答。我不得不添加一个标志来防止 didScroll 里面的代码被一次又一次地调用。然后在滚动结束后,我关闭了标志。
    【解决方案2】:

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

    【讨论】:

    • 这正是我所说的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多