滚动后CollectionView单元格改变大小 - AutoLayout

时间:2017-01-27 03:43:47

标签: ios swift autolayout uicollectionview constraints

我有一个嵌套在Collection View中的Collection View。我尝试根据内容动态更改单元格大小的行为是为子集合的高度创建一个出口,并在获取内容大小后更改其常量。

这是我的IB约束的屏幕显示,我正在使用突出显示的高度。

enter image description here

所以我将子集合视图(aqua的颜色框)限制在四边的父级单元格中,高度不变。

在我的自定义单元格类中,它保存子集合视图,我将高度设置为:

    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)

结果是在初始加载时一切都正确显示,但是在滚动顶部单元格后,有两行数据(绿色数字图标)将自身调整为与其他数据相同。您可以在下面的gif中看到子集合视图(aqua'ish彩色框)仍然是相同的大小,它是缩小的父单元格(橙色框)。

enter image description here

我在这里难以理解。

它回到完整大小的位只是gif重置它实际上并没有这样做。

2 个答案:

答案 0 :(得分:1)

在cellForItemAt(其中outerCell是正常声明的单元格)中重新声明委托,然后重新加载子集合:

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

答案 1 :(得分:0)

尝试在故事板估计大小中将您的收藏视图设置为none

enter image description here