我正在尝试使用 tableView 的这种方法简单地删除单元格。出于某种原因,这样做会产生这个我无法弄清楚的奇怪的动画错误。这是我的代码:
let deleteSubcatAction = UIContextualAction(style: .destructive, title: "Delete") { (action, view, handler) in
print("Delete Subcategory Action Tapped")
let subcategory = Global.budget.categories[indexPath.section].subcategories[indexPath.row]
Global.budget.categories[indexPath.section].subcategories.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .left) }
deleteSubcatAction.backgroundColor = .red
let rowConfig = UISwipeActionsConfiguration(actions: [deleteSubcatAction])
return rowConfig
当我向左拖动单元格时,我看到了预期的删除操作,按下该操作会调用应有的方法。但是,单元格不会从表格中删除。相反,操作保持锁定状态,单元格的其余内容滑回右侧,就好像我没有按下操作就松开了手指一样。然后,如果我点击我应用程序中的其他地方,操作会最小化回到右侧,并且单元格会简单地消失而没有任何类型的移除动画。 Here's a video我记录的错误。这是怎么回事?
最佳答案
首先出现的是您没有在 UIContextualAction
闭包结束时调用完成处理程序(在您的例子中,是 handler
属性)。如 handler(true)
。
第二件事是您没有做任何事情来确保 TableView 中的 Action 正确地动画化。执行此操作的非侵入式方法(无需从数据源重新加载整个 TableView )是使用:
tableView.beginUpdates()
tableview.endUpdates()
See the API docs了解更多信息。
附言理想情况下,您应该将数据源连接到 TableView ,使 TableView 对数据源观察者触发的事件使用react,而不是“手动”删除表行以响应 UI 操作。
关于ios - 使用 TrailingSwipeActionsConfigurationForRowAt 删除单元格时出现一些奇怪的动画错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54932103/