TrailingSwipeActionsConfigurationForRowAt 不稳定

ond*_*rol 3 uitableview ios swift

我正在尝试为 iOS 11 及更高版本制作可滑动的表格视图单元格,并尝试使用TrailingSwipeActionsConfigurationForRowAt但它适用于 iPad,但不适用于 iPhone。
iPhone 中不调用它。
令人惊讶的是,如果我尝试滑动手机超过 10 或 20 次,有时它会起作用一次。

这是我的控制器的表视图扩展

import UIKit

extension CustomViewController: UITableViewDelegate, UITableViewDataSource {
    func initTableView() {
        tableView.register(cell: SingleLineListItemViewCell.self)
        tableView.delegate = self
        tableView.dataSource = self
        tableView.estimatedRowHeight = 64
        tableView.rowHeight = UITableView.automaticDimension

        tableView.backgroundColor = .green
        tableView.isEditing = false
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 3
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let model = SingleLineListItemViewModel(title: "coko")

        let cell = tableView.dequeueReusableCell(withIdentifier: SingleLineListItemViewCell.reuseIdentifier) as? SingleLineListItemViewCell
        cell?.model = model
        cell?.isFirst = indexPath.row == 0
        cell?.isLast = indexPath.row == 2
        return cell!
    }

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        return nil
    }

    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 0
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return  100
    }

    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return 64.0
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        print("didSelectRowAt....")
        router?.routeToTransfer()
    }

    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }

    @available(iOS 11.0, *)
    func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
        return nil
    }

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        // Action here
        // In case of delete, you can simply do:
        if editingStyle == .delete {
            //Remove item at relative position from datasource array
            //Reload tableview at the respective indexpath
        }
    }

    @available(iOS 11.0, *)
    func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
        let deleteAction = UIContextualAction(style: .destructive, title: "Delete") { _, _, _ in
            //YOUR_CODE_HERE
        }
        deleteAction.backgroundColor = .red
        let configuration = UISwipeActionsConfiguration(actions: [deleteAction])
        configuration.performsFirstActionWithFullSwipe = false
        return configuration
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激。

fla*_*ker 5

唯一明显的错误是您没有调用完成处理程序。根据API文档,需要调用完成处理程序来指示操作是否成功。它实际上是做什么的我不知道...

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let deleteAction = UIContextualAction(style: .destructive, title: "Delete") { _, _, completionHandler in
       //YOUR_CODE_HERE
       completionHandler(true)
     }
     deleteAction.backgroundColor = .red
     let configuration = UISwipeActionsConfiguration(actions: [deleteAction])
     configuration.performsFirstActionWithFullSwipe = false
     return configuration
}
Run Code Online (Sandbox Code Playgroud)

如果这没有任何区别,您是否有任何其他可能与滑动操作冲突的手势识别器?