2017-01-27 13 views
0

У меня есть просмотр коллекции вложенной в виде коллекции. То, что я сделал, чтобы динамически изменять размер ячейки на основе содержимого, создает выход для высоты дочерней коллекции и меняет ее константу после получения размера содержимого.CollectionView Изменение размера ячейки после прокрутки - AutoLayout

Это показ экрана моих ограничений IB, и я использую высоту, выделенную.

enter image description here

Так я имею представление коллекции ребенка (коробка цвета Aqua в) с ограничениями в клетке родителя на 4-х сторон с постоянной высотой.

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

let contentHeight = innerCollectionView.collectionViewLayout.collectionViewContentSize.height 
     innerCollectionHeight.constant = contentHeight 

А потом в моем точке зрения класса контроллера, который удерживает вид родительского сбора в viewDidLoad я указать оценочный размер элемента с:

let flowLayout = outerCollectionView.collectionViewLayout as! UICollectionViewFlowLayout 
     flowLayout.estimatedItemSize = CGSize(width: view.frame.width - 20, height: view.frame.height/4) 
     flowLayout.minimumLineSpacing = 10 
     flowLayout.sectionInset = UIEdgeInsets(top: 0, left: 10, bottom: 10, right: 10) 

в результате получается, что на начальных всех нагрузках отображается правильно, однако после прокрутки верхней ячейки, которая имеет 2 строки данных (зеленые иконки числа) настраивается таким же, как и другие. Вы можете видеть в gif ниже, что вид детской коллекции (цветной квадрат aqua'ish) по-прежнему того же размера, это уменьшенная по размеру родительская ячейка (оранжевый ящик).

enter image description here

Я озадачен здесь, что делать.

бит, где он возвращается к полному размеру, является просто списком gif, на самом деле это не так.

ответ

0

внутри cellForItemAt (где outerCell это обычно объявлена ​​клетка) переобъявить делегат, а затем перезагрузить коллекцию ребенок:

outerCell.setCollectionViewDataSourceDelegate(dataSourceDelegate: self, forItem: indexPath.item) 
outerCell.innerCollectionView.reloadData() 
outerCell.innerCollectionView.layoutIfNeeded()