在我的应用中,一个屏幕具有表格视图,并在滑动UITableViewCell
上显示“编辑”和“删除”按钮。
一切正常,但问题出现在iOS 11的UITableViewCell
默认动画中。
我知道iOS 11中的某些行为和基础已更改。当您继续拉动您的单元格时,editActionsForRowAt
方法将自动调用。
有时它很好,但是当你在桌子上添加了一个按钮,然后看起来丑陋的行为。
请参阅下面的内容,iOS 10和iOS 11中滑动单元格的默认行为。
iOS 10:
iOS 11:
您可以在iOS 11
中看到,如果我拉动然后自动editActionsForRowAt
方法操作系统并显示警告消息。
我的问题:有什么原因可以阻止iOS 11的这种行为和代码吗?
因为如果你的桌子有超过2个按钮,那么它看起来很难看。
答案 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设备。