gpt4 book ai didi

ios - 删除行时,编辑操作部分忽略 UITableViewRowAnimation 设置

转载 作者:行者123 更新时间:2023-11-28 08:23:44 25 4
gpt4 key购买 nike

如果我在表格 View 行上滑动以将其删除,那么该行不会作为一个完整的实体消失 - 我的意思是单元格的编辑操作部分总是通过向上滑动自行消失,但单元格的其余部分根据为 UITableViewRowAnimation 设置的任何值自行关闭。

因此,例如,如果使用 deleteRows(... .left) 删除下面的行,则该行的白色部分将滑到屏幕左侧,但 UNBLOCK 部分会单独运行- 无论 deleteRows 中使用的 UITableViewRowAnimation 值如何,它总是向上滑动屏幕。

enter image description here

代码如下:

override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let deleteAction = UITableViewRowAction(style: .default, title: "UNBLOCK") { action, index in
self.lastSelectedRow = indexPath
let callerToUnblock = self.blockedList[indexPath.row]
self.unblockCaller(caller: callerToUnblock)
}
deleteAction.backgroundColor = UIColor.tableViewRowDeleteColor()
return [deleteAction]
}

func unblockCaller(caller:Caller) {
DispatchQueue.global(qos: .background).async {
Model.singleton().unblockCaller(caller) {(error, returnedCaller) -> Void in
if error == nil {
DispatchQueue.main.async {
if let lastSelectedRow = self.lastSelectedRow {
self.tableView.deleteRows(at: [lastSelectedRow], with: .left)
}
}
...

有人知道如何使整行一致地一起移动吗?

最佳答案

正确。这两个对象表现为独立的实体。您无法控制 UITableViewRowAction 按钮的动画,因为它绘制在 UITableViewCell 框架之外。

在此Captured View Hierarchy 中查看UITableViewCellDeleteConfirmationView 布局。 (请注意 UITableViewCell 框架(蓝色)如何不包含 UITableViewCellDeleteConfirmationView(红色): Expanded view showing that the cell is not clipping the button

修复

在删除单元格之前隐藏编辑按钮。它将在单元格删除动画之前被删除,然后其余单元格向上滚动。

func unblockCaller(caller:Caller, indexPath:IndexPath) {
// Perform the deletion
// For example: self.blockedList.remove(at: indexPath.row)

// if error == nil...
DispatchQueue.main.async {
self.tableView.setEditing(false, animated: false)
self.tableView.deleteRows(at: [indexPath], with: .left)
}
}

Animation of the deletion

补充意见

  1. 我建议不要使用状态变量来跟踪必须删除的单元格 (self.lastSelectedRow = indexPath)。而是将路径传递给 worker 方法,以更好地隔离任务。
  2. 尽可能使用标准外观;如果 UNBLOCK 按钮只是一个红色控件,则更喜欢 style: .destructive 并避免自定义配色方案。 editActionsForRowAt 变为单行:
    self.unblockCaller(调用者:self.blockedList[indexPath.row],indexPath:indexPath)

关于ios - 删除行时,编辑操作部分忽略 UITableViewRowAnimation 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40644517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com