ios - 使用 TrailingSwipeActionsConfigurationForRowAt 删除单元格时出现一些奇怪的动画错误

标签 ios swift uitableview

我正在尝试使用 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/

相关文章:

ios - 如何删除 UITableView 部分标题删除后创建的空间?

ios - self.tableView.reloadData() 不起作用

ios - 获取 NSMutableArray 中最后一个重复字符串的索引

ios - 将绘图剪辑到 CAShapeLayer 的不透明(描边)部分

ios - 返回创建者 View Controller 时背景音乐重叠

swift - 无法加载 XCTest 的底层模块

ios - 使用 UIWindow 获取 visibleViewController?

swift - 先前打开的 VC 的功能触发

ios - 如何在 iOS 中获得一个不会过期的缓存?

ios - Swift 通用闭包总和