iOS 11停止滑动UITableViewCell的默认行为

时间:2017-10-11 12:29:28

标签: ios swift uitableview ios11

在我的应用中,一个屏幕具有表格视图,并在滑动UITableViewCell上显示“编辑”“删除”按钮。

一切正常,但问题出现在iOS 11的UITableViewCell默认动画中。

我知道iOS 11中的某些行为和基础已更改。当您继续拉动您的单元格时,editActionsForRowAt方法将自动调用

有时它很好,但是当你在桌子上添加了一个按钮,然后看起来丑陋的行为。

请参阅下面的内容,iOS 10和iOS 11中滑动单元格的默认行为。

iOS 10:

enter image description here

iOS 11:

enter image description here

您可以在iOS 11中看到,如果我拉动然后自动editActionsForRowAt方法操作系统并显示警告消息。

我的问题:有什么原因可以阻止iOS 11的这种行为和代码吗?

因为如果你的桌子有超过2个按钮,那么它看起来很难看。

1 个答案:

答案 0 :(得分:18)

这似乎可以满足您的需求。然而,动画与iOS 10完全不同,但它消除了完全滑动,但仍然看起来不错。

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

    let deleteAction = UIContextualAction.init(style: UIContextualAction.Style.destructive, title: "Delete", handler: { (action, view, completion) in
        //TODO: Delete
        completion(true)
    })

    let editAction = UIContextualAction.init(style: UIContextualAction.Style.normal, title: "Edit", handler: { (action, view, completion) in
        //TODO: Edit
        completion(true)
    })

    let config = UISwipeActionsConfiguration(actions: [deleteAction, editAction])

    config.performsFirstActionWithFullSwipe = false
    return config
}

关键行是config.performsFirstActionWithFullSwipe = false,因为这会禁用完整的滑动。

以上代码将覆盖iOS 11上的func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath),但您的editActionsforRowAt仍将用于子iOS 10设备。