温馨提示:本文翻译自stackoverflow.com,查看原文请点击:ios - How to prevent cells from indenting when using custom swipe actions in edit mode?
ios tableview

ios - 在编辑模式下使用自定义滑动操作时,如何防止单元缩进?

发布于 2020-03-27 11:56:00

我正在尝试实现两个单元格,一个单元格可以通过滑动删除,而另一个单元格则不能删除,但是具有另一种滑动操作。

这是现在的样子:

刷卡

我不希望单击“编辑”时缩进中间单元格。没有任何自定义代码,所有单元格都会显示该红色圆圈并显示一个删除按钮,但是我添加了几行代码来防止这种情况。

这段代码会将没有前导或尾随滑动动作的所有单元格设置为不可编辑,从而解释了gif底部的单元格。我必须对此包括最主要的滑动动作,因为如果单元格不是editable,那么我根本就不会滑动。

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    let vm = sections[indexPath.section].viewModels[indexPath.row]
    return vm.leadingSwipeActions != nil || vm.trailingSwipeActions != nil
}

以下代码将阻止中间单元格显示红色圆圈。

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
    return sections[indexPath.section].viewModels[indexPath.row].trailingSwipeActions == nil ? .none : .delete
}

如果我不通过.none前导动作进入该单元格,那么它将显示红色圆圈甚至会显示默认的删除滑动。我不希望删除该行!

我如何防止中间单元缩进,同时仍保持滑动的能力?

查看更多

查看更多

提问者
Sti
被浏览
182
Zaya 2019-07-08 21:52

此方法似乎有效!tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool https://developer.apple.com/documentation/uikit/uitableviewdelegate/1614873-tableview?language=objc