ios13 предотвращает опускание tableView, который прокручивается вверх, от отклонения стиля листа, представленного модально viewController

У меня есть tableViewController, который представлен модально с представлением стиля листа по умолчанию.

Я хочу сохранить этот модальный стиль, так как он хорошо выглядит и хорошо работает в моем приложении. И мне нравится увольнение при опускании на панель навигации. Однако я не хочу опускать ячейки tableView, чтобы отключить tableViewController, когда tableView уже прокручен наверх.

Есть ли способ запретить это поведение, но сохранить модальное представление стиля таблицы? Я хочу, чтобы раскрытие tableView сохраняло эффект вертикального отскока и только чтобы можно было отклонить модально представленный tableViewController через панорамирование, потянув вниз часть панели навигации.

1 ответ

Решение

Вы можете отключить поведение оттягивания до закрытия, установив isModalInPresentation к true на контроллере табличного представления, когда пользователь начинает перетаскивать табличное представление, а затем сбросить его обратно на false когда они перестают перетаскивать, вот так:

class YourTableViewController: UITableViewController {
    override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        isModalInPresentation = true
    }

    override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        isModalInPresentation = false
    }
}

Обратите внимание, что вы все равно сможете немного опустить контроллер табличного представления, но, по крайней мере, вы не сможете полностью его отключить. И поскольку значение снова установлено наfalse когда перетаскивание останавливается, вы сможете закрыть его, потянув вниз панель навигации.

Кроме того, если вы добавите UIRefreshControl в табличное представление, он отключает поведение "потянуть для закрытия" при перемещении вниз в табличном представлении.

Другие вопросы по тегам