2017-01-27 8 views
0

Ich habe eine Collection-Ansicht in einer Collection-Ansicht geschachtelt. Was ich getan habe, um zu versuchen, dass sich die Zellengröße basierend auf dem Inhalt dynamisch ändert, ist eine Steckdose für die Höhe der Kindsammlung zu erstellen und ihre Konstante zu ändern, nachdem die Inhaltsgröße erhalten wurde.CollectionView Zelle ändert die Größe nach dem Bildlauf - AutoLayout

Dies ist eine Bildschirmshow meiner IB Constraints, und ich verwende die Höhe markiert.

enter image description here

So habe es die Kind Sammlung Ansicht (Aqua Farbenkasten) beschränkte auf die Zelle der Mutter auf 4 Seiten mit Höhe konstant.

In meiner benutzerdefinierten Zellklasse, die das Kind Sammlung Ansicht hält, ich bin Einstellung der Höhe wie:

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

Und dann Controller-Klasse in meiner Ansicht, die die übergeordnete Sammlung Ansicht in viewDidLoad hält i spezifizieren die geschätzte Objektgröße mit:

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) 

das Ergebnis ist, dass auf die Anfangslast alles richtig angezeigt wird, aber nach der oberen Zelle scrollen, die hat zwei Reihen von Daten (grün Anzahl Icons) selbst die gleiche wie die anderen sein einstellt. Sie können in dem unten stehenden gif sehen, dass die Ansicht der Kindsammlung (die aquaisch gefärbte Box) immer noch die gleiche Größe hat, es ist die Elternzelle (orange Box), die in der Größe reduziert wurde.

enter image description here

Ich bin hier, was stapfte zu tun.

das Bit, wo es wieder auf die volle Größe geht, ist nur das gif Resting es nicht wirklich das tun.

Antwort

0

innen cellForItemAt (wo outerCell die normalerweise erklärt Zelle) neu deklarieren delegieren und dann das Kind Sammlung neu zu laden:

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