使用UICollectionView创建网格布局
问题描述:
我想构建一个类似于网格的集合视图布局。与使用UICollectionView创建网格布局
- 含有行子行含有亚列
- 行具有可变高度
- 列。
- 滚动应该可以在两个方向上进行。
- 它应该是可以添加/删除行/列
我使用回收流布局尝试,但它开始变得复杂。构建自定义布局似乎是更好的选择。
面临了我几个问题: - 存储网格信息
- 数据结构(基础类层次)(只布局)支持的行和列的简单的添加/删除。
- 考虑到行可以是可变大小,计算内容视图的高度。
- 计算将位于可见矩形内的行范围。现在我要收集所有行的高度信息并将它们存储在一个数组中,并进一步计算内容大小的高度。同样为了确定哪些行位于给定矩形内,我必须应用一个谓词。如果对“layoutAttributesForElementsInRect”的每次调用都这样做,当no行数超过500时仍然可以接受fps。
- 我尝试维护可见行和列的布局属性的NSSet,并在行/列移入和移出时清除/添加属性。但是创建可见项目的每个属性的速度会更慢。另外什么设计模式最适合网格?
- 最后但并非最不重要的是有可能用UICollectionView设计这样的东西吗?
关于如何使用这个程序有任何想法,
谢谢:)
答
所以,我有你同样的问题,我已经以这种方式(例如SWIFT)解决。
在此示例中,单元格绘制为平方,2列x N行。
class CustomViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout
@IBOutlet var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
collectionView.delegate = self;
collectionView.dataSource = self;
}
//MARK: - Collection view flow layout delegate methods -
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let screenSize = UIScreen.mainScreen().bounds
let screenWidth = screenSize.width
let cellSquareSize: CGFloat = screenWidth/2.0
return CGSizeMake(cellSquareSize, cellSquareSize);
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets {
return UIEdgeInsetsMake(0, 0, 0.0, 0.0)
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
return 0.0
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
return 0.0
}
}