【发布时间】:2017-12-29 02:19:53
【问题描述】:
我需要一个在网格中显示单元格的集合视图。所以标准的流程布局对我来说很好。但是,我想知道每行显示多少个单元格,而单元格高度应该由我放在单元格上的自动布局约束来确定。这是我的单元格布局:
这很简单——一个图像视图和它下面的两个标签。现在图像视图有一个纵横比约束(1:1),这意味着只要单元格的宽度已知,自动布局规则就应该自动知道高度(有垂直约束通过: celltop-image-label1-label2-cellbottom)。
现在,由于我不知道任何其他好的方法来告诉集合视图每行显示 2 个项目,我已经覆盖了 UICollectionViewDelegateFlowLayout 方法:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let availableWidth = collectionView.frame.width - padding
let widthPerItem = availableWidth / itemsPerRow
return CGSize(width: widthPerItem, height: widthPerItem)
}
如您所见,由于我不知道项目高度,因此我返回与宽度相同的值,希望稍后自动布局能够修复它。我还设置了estimatedItemSize,以便整个机制开始工作。
结果很奇怪 - 集合视图似乎没有考虑我返回那里的宽度,主要取决于标签长度:
我看到了一些其他答案,人们建议手动计算单元格的宽度大小,比如告诉“自己布局,然后测量自己,然后给我这个宽度的大小”,即使它仍然会运行自动布局规则在幕后,我想知道是否有办法做到这一点,而无需手动弄乱尺寸。
【问题讨论】:
标签: ios uicollectionview uicollectionviewcell uicollectionviewlayout