Авторазмер UITableViewCell, который содержит UICollectionView - PullRequest
0 голосов
/ 07 марта 2019

У меня проблемы с автоматическим изменением размера UITableViewCell, который содержит UICollectionView.Иерархия представления примерно такая:

UITableViewCell
-- Content View
---- Custom View
------ UIStackView (vertical)
--------- UILabel
--------- UICollectionView (vertical flow layout)

Когда UITableViewCell создается или используется повторно, collectionView получает источник данных, который затем начинает обрабатывать.Мне нужно, чтобы все ячейки collectionView отображались в tableViewCell, поэтому я наблюдаю изменения размера контента collectionView в пользовательском представлении следующим образом

    self.collectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.old, context: nil)

Как только collectionView закончит рендеринг своего содержимого, я прочитал его contentSize иустановите ограничение высоты представления коллекции соответственно.Это работает нормально.

Проблема теперь в том, что все значения вычисляются правильно, но размер ячейки не изменяется в tableView.В консоли нет ошибок или предупреждений автоматического размещения, поэтому я предполагаю, что все ограничения верны.Метка в stackView также автоматически изменяет размер, и это прекрасно работает.

Я могу передать информацию о новом contentSize в stackView вплоть до TableViewController, но я не знаю, что вызывать, где принудительно вызыватьautolayout для пересчета высоты отдельной ячейки.

Если я вызову tableView.reloadData() на уровне контроллера, если ограничение высоты collectionView в ячейке не соответствует размеру его содержимого, оно работает.Но это вызывает задержку и, очевидно, слишком дорого.

Если я передам ячейку, которая изменилась в tableView, и прошу перезагрузить только ячейку, tableView не найдет indexPath ячейки (вероятно, потому что этовсе еще за кадром).Так что этот подход не работает.

Спасибо!

1 Ответ

0 голосов
/ 07 марта 2019

Прежде всего, спасибо всем за ответы!

После двух дней выдергивания моих волос это выглядит как Макет UITableViewCell не обновляется до повторного использования ячейки решил это за меня.

Проблема была в пропаже

    cell.layoutIfNeeded()

в конце

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

Здесь вы можете увидеть, как это выглядит сейчас. Настройка как в оригинальном вопросе.

Еще раз спасибо всем за ваши указатели!

Here you can see the result

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...