Подтвердить что ты не робот

iOS 11 останавливает поведение по умолчанию для swipe UITableViewCell

В моем приложении на одном экране есть табличный вид и отображаются кнопки "Изменить" и "Удалить" при прокрутке UITableViewCell.

Все работает хорошо, но проблема заключается в анимации по умолчанию UITableViewCell в iOS 11.

Я знаю, что какое-то поведение и фонда изменены в iOS 11. Когда вы продолжаете тянуть, чтобы editActionsForRowAt по вашей ячейке, тогда метод editActionsForRowAt будет вызываться автоматически.

Несколько раз это хорошо, но когда вы добавляли больше одной кнопки на прокрутку таблицы, тогда выглядело уродливое поведение.

Посмотрите ниже, Поведение по умолчанию для ячейки swipe в iOS 10 и iOS 11.

iOS 10:

enter image description here

iOS 11:

enter image description here

Вы можете видеть в iOS 11 если я вытащил, чтобы проведите пальцем, затем автоматически editActionsForRowAt os для вызова и отображения предупреждающего сообщения.

Мой вопрос: есть ли какие-либо причины, чтобы остановить это поведение iOS 11 и код для этого?

Потому что если ваш стол имеет более 2-х кнопок, то он выглядит уродливым.

4b9b3361

Ответ 1

Это похоже на то, что вы ищете. Однако анимация не совсем то же самое, что и в 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 как это отключит полный пробел.

Вышеприведенный код переопределит func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) на iOS 11, но ваш editActionsforRowAt будет по-прежнему использоваться для устройств sub iOS 10.