【发布时间】:2017-08-06 21:14:41
【问题描述】:
我正在尝试创建一个所有单元格 100% 可见的 UICollectionView,这样我就不需要滚动来查看它们。我目前正在尝试显示 3x3 网格,并即时计算单元格的大小。
我有 CollectionView 和 UIView 用于容器视图中的标题。标头固定在容器顶部,高度为 100 像素。 CollectionView 位于其下方,固定在每一侧,底部,其顶部固定在标题的底部。
当我使用 sizeForItemAt 时,我试图找到可见区域的大小以将其分成 1/3 大小的块(填充/插入除外)。我的代码如下:
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {
let numRows = self.numRows()
let itemsPerRow = self.itemsPerRow()
// let frameSize = collectionView.frame.size
let frameSize = collectionView.bounds.size
// let frameSize = collectionView.collectionViewLayout.collectionViewContentSize
// let frameSize = collectionView.intrinsicContentSize
let totalItemPadding = self.itemPadding * (itemsPerRow - 1)
let totalLinePadding = self.linePadding * (numRows - 1)
let availableWidth = frameSize.width - totalItemPadding
var widthPerItem = availableWidth / itemsPerRow
let availableHeight = frameSize.height - totalLinePadding
var heightPerItem = availableHeight / numRows
return CGSize(width: widthPerItem, height: heightPerItem)
}
结果始终是第 3 行大约有一半被遮挡,因为看起来 frameSize 比它在模拟器中实际显示的“高”。
UICollectionView 中有什么东西可以给我可见的大小吗?我在布局时间方面是否处于错误的时间,或者我应该添加另一种在某些时候使大小无效的方法?
我还没有找到任何关于显示所有项目且不垂直滚动的集合视图的教程,因此非常感谢任何其他指针(甚至是执行类似操作的库)。
谢谢!
【问题讨论】:
-
必须是 UICollectionView 吗?根据您对所需内容的描述,我认为您最好使用嵌套的 StackViews
-
你应该使用集合视图中的部分标题;)
标签: ios swift swift3 uicollectionview uicollectionviewlayout