У меня есть статический UITableView, в котором у меня есть UIPickerView внутри UITableViewCell. При запуске didSelectRowAt предполагается переключение высоты ячейки с UIPickerView. Я использую beginUpdates() и endUpdates(), чтобы изменить высоту ячейки. Он выглядит правильно при расширении, но при свертывании UIPickerView не анимируется и разрушается быстрее, чем ячейка. Не уверен, что я делаю не так.

Я убедился, что все представления установлены на true для clipToBounds в UITableViewCell, ContentView (из UITableViewCell) и UIPickerView. Я попытался обернуть beginUpdates / endUpdates в DispatchQueue.main.async. Мой UIPickerView использует AutoLayout и (передний, задний, верхний, нижний) края равны представлению содержимого ячейки. Я использую StoryBoard для моего интерфейса.

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        switch (indexPath.section, indexPath.row) {
        case (1,1):
            showPicker = !showPicker
            tableView.beginUpdates()
            tableView.endUpdates()
        default:
            ()
        }
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

        switch (indexPath.section, indexPath.row) {
        case (1, 1):
            if !showDueDate {
                return 0
            }
        case (1, 2):
            if !showPicker {
                return 0
            }
        case (_, _):
            break
        }
        return super.tableView(tableView, heightForRowAt: indexPath)
}

Я ожидал, что анимация будет плавной и UIPickerView свернется рядом с UITabeViewCell.

Увидеть GIF, чтобы увидеть проблему

через GIPHY

0
griffinmacias 21 Июн 2019 в 18:01

2 ответа

Лучший ответ

Догадаться. Мое нижнее ограничение UIPickerView было установлено в нижней части представления содержимого, константа была равна 0. Изменил его на <= 0 и исправил. Не понимаю, почему 0 не сработало. По крайней мере, разобрался ...

0
griffinmacias 21 Июн 2019 в 18:39

Используйте self.tableView.reloadRows(at: IndexPath(row: indexPath.row, section: indexPath.section), with: .fade) вместо beginUpdates / endUpdates. Это даст вам плавную анимацию при смене анимации таблицы.

0
Lirik 21 Июн 2019 в 15:45