UITableViewDropCoordinator drop(_:toRowAt:) 不执行动画



我有一个带有Drop代表的UitableView(ios 11)。在我实施

func tableView(_ tableView: UITableView, 
    performDropWith coord: UITableViewDropCoordinator) {

...我正在调用协调员的drop(_:toRowAt:)。根据苹果的说法,这应该导致拖动项目预览为精确覆盖单元格。但是,这种事情没有发生。拖动项目预览只是缩小到位,就像我完全没有调用drop(_:toRowAt:)一样。

此命令实际上 do 什么?

uitaiteViewDropCoordinator drop(_:toRowAt:)确实可以工作,但仅在非常有限的情况下。这是您必须了解的:

  • drop(_:toRowAt:)必须在performDropWith实现的主要部分中调用,而不是在异步loadObject呼叫中。所有UITATION VIEWDROPCOORDINATOR drop命令都是如此。

  • drop(_:toRowAt:)这样的工作:

    1. 首先,快照在给定行处的单元格。

    2. 然后,它将快照用作拖动项目预览,并为快照动画以覆盖该行的单元格。

因此,drop(_:toRowAt:)仅在非常有限的情况下才有用。当您给出此命令时,如果所讨论的单元格是由于下降而更改其外观,则必须已经重新加载单元格 - 因为快照将与给出了drop命令时的单元格,您不希望单元格的旧外观在预览中动画。

因此,drop(_:toRowAt:)loadObject没有用。(这就是A 占位符的目的。)它仅在本地阻力期间才有用,您可以立即从拖动项目的localObject中获取数据。它仅在您将删除到现有单元格上的简单情况下才有用,并且替换 it。

示例:

guard let s = item.localObject as? String else {return}
// ... update model using s ...
tableView.reloadRows(at: [ip], with: .none)
coordinator.drop(item, toRowAt: ip)

请注意,我做过不是调用performBatchUpdatesdrop(_:toRowAt:)performBatchUpdates无关,因为快照会太早拍摄。它仅在这套非常有限的简单情况下工作。

(在有关此主题的WWDC视频中,Apple似乎暗示drop(_:toRowAt:)在某种程度上对应于. insertAtDestinationIndexPath的滴度。但这不是True 。即将插入,因为您还没有插入它。再次,这就是占位符的目的。)

相关内容

  • 没有找到相关文章

最新更新