自定义UICollectionView包装其自定义单元格

时间:2018-04-27 18:15:06

标签: ios uicollectionview flowlayout

所以我有自定义自定义UICollectionViewCells,这是自我调整大小。

现在我需要UICollectionView包含它的内容,而没有确切的预定义大小。就像android linearLayout包含它的内容或任何WPF面板一样。

我怎样才能做到这一点?

问题是我希望UICollectionView自己测量并包装它的内容。我将在代码中创建它并将其作为子代添加到代码中的另一个视图。

我正在使用flowLayout

有什么建议吗?

编辑: 附加的示例项目,仅包含自定义集合视图 https://monosnap.com/file/9Y78XqcwAUNFxCo382u3bTr7CDS77F

3 个答案:

答案 0 :(得分:0)

您可以检查collectionView的边界大小,并相应地更新容器的高度。你可能需要覆盖一些api来更新它。

答案 1 :(得分:0)

您应该尝试设置集合视图流布局的estimatedItemSize:

if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
    flowLayout.estimatedItemSize = CGSize(width: 1, height: 1)
}

来源:https://medium.com/@wasinwiwongsak/uicollectionview-with-autosizing-cell-using-autolayout-in-ios-9-10-84ab5cdf35a2

答案 2 :(得分:0)

如果需要,您应该尝试为collectionView及其子视图设置内容拥抱优先级和内容压缩阻力优先级。

这可以通过storyboard / xib中的大小检查器来实现,但是当你使用代码来实现相同的代码时。

// Hugging priority is given so that views are sized less than the estimated size.
collectionView.setContentHuggingPriority(1000, for: .vertical)
collectionView.setContentHuggingPriority(1000, for: .horizontal)

// Content Compression resistance is given so that views are not sized less than its size because of other constraints.   
collectionView.setContentCompressionResistancePriority(1000, for: .vertical)
collectionView.setContentCompressionResistancePriority(1000, for: .horizontal)

如果需要根据它们的大小来拥抱它们​​,则可能需要为collectionView的子视图设置相同的内容。 例如,让我们看看你的collectionView中的标签大小会有所不同,你可能需要为标签设置内容拥抱和阻力优先级。