Изменение размера представления заставляет другие представления возвращаться в UITableViewCell - PullRequest
2 голосов
/ 15 апреля 2020

Мне нужно развернуть или свернуть ячейку табличного представления и ее содержимое.
Для этого я использую NSLayoutConstraints. Несмотря на то, что работа выполнена, я сталкиваюсь с некоторыми неприятными проблемами компоновки с другими представлениями в ячейке.
Вот видео.
А вот мой код:

ViewController:

extension ViewController: TableViewCellDelegate {
    func tableView(shouldExpand cell: TableViewCell) {
        tableView.performBatchUpdates({
            cell.expand()
        })
    }

    func tableView(shouldCollapse cell: TableViewCell) {
        tableView.performBatchUpdates({
            cell.collapse()
        })
    }
}

TableViewCell:

func expand() {
    UIView.animate(withDuration: 0.57) {
        self.viewHeight.constant = 320
        self.view.alpha = 1
        self.layoutIfNeeded()
    }
}

func collapse() {
    UIView.animate(withDuration: 0.57) {
        self.viewHeight.constant = 0
        self.view.alpha = 0
        self.layoutIfNeeded()
    }
}

Как остановить изменение размера верхнего вида?

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Вы можете использовать UIStackView и просто показать и скрыть представление для свертывания и развертывания. UIStackView будет прост в обращении и будет работать для вас.

0 голосов
/ 15 апреля 2020

executeBatchUpdates используется для анимации изменений в tableView на основе изменений в источнике данных. Поскольку у вас нет никаких изменений в источнике данных, нет необходимости выполнять анимацию внутри блока tableView.performBatchUpdates. Попробуйте без performBatchUpdates.

func tableView(shouldExpand cell: TableViewCell) {
     cell.expand()
}

func tableView(shouldCollapse cell: TableViewCell) {
     cell.collapse()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...