У меня проблемы с автоматическим изменением размера 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 ячейки (вероятно, потому что этовсе еще за кадром).Так что этот подход не работает.
Спасибо!