gpt4 book ai didi

ios - UITableView 破坏性上下文菜单动画

转载 作者:行者123 更新时间:2023-12-01 15:44:11 40 4
gpt4 key购买 nike

我正在将 iOS13 上下文菜单添加到我的表格 View 中。菜单操作之一允许用户删除项目:

override func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { suggestedActions in
let deleteAction = UIAction(title: "Delete", image: UIImage(systemName: "trash.fill"), identifier: nil, discoverabilityTitle: "", attributes: UIMenuElement.Attributes.destructive) { action in
self.data.remove(at: indexPath.row)

//Remove from the table.
self.tableView.deleteRows(at: [indexPath], with: .automatic)
}

return UIMenu(title: "", children: [deleteAction])
}
}
我正在使用默认的预览 View Controller (所以它只显示单元格)。我目前看到一个奇怪的动画工件,其中显示上下文菜单预览,而被删除的行下方的项目动画起来,然后预览消失为白色(所以看起来列表中有一个空白行),然后该表重新绘制并显示被掩盖的项目。
enter image description here
这是使用默认单元格,但在使用包含更多信息的自定义单元格时看起来更糟。有没有办法让这个 Action 的动画效果更好?

最佳答案

我也遇到了这个问题。该错误可能是由于用于生成预览的原始单元格被删除、移动或更改所致。
我找到的解决方案是实现委托(delegate)方法tableView(_:previewForHighlightingContextMenuWithConfiguration:) ,将原始单元格作为 View 传递给它,但自定义 UIPreviewParameters使用 UIColor.clear :

    override func tableView(_ tableView: UITableView, previewForHighlightingContextMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? {
guard let indexPath = configuration.identifier as? IndexPath, let cell = tableView.cellForRow(at: indexPath) else {
return nil
}

let parameters = UIPreviewParameters()
parameters.backgroundColor = .clear

return UITargetedPreview(view: cell, parameters: parameters)
}
为了识别此委托(delegate)方法中的原始单元格,您需要一种识别它的方法。一种方法是设置 indexPath作为 UIContextMenuConfiguration 的标识符, 像:
    override func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
return UIContextMenuConfiguration(identifier: indexPath as NSIndexPath, previewProvider: nil) { _ in
return UIMenu(title: "", children: [
UIAction(title: "Delete", image: UIImage(systemName: "trash"), attributes: .destructive) { action in
self.data.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
}
])
}
}
但是,如果您的数据可以在上下文菜单的显示和操作之间发生变化,那么您需要一种更可靠的方法来识别它。
我不必执行 tableView(_:previewForDismissingContextMenuWithConfiguration:)为此工作。

关于ios - UITableView 破坏性上下文菜单动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63346124/

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