我正在创建一个启用分页并从左向右滚动的UICollectionView
。我正在使用NSFetchedResultsController从CoreData检索结果,这意味着它使用集合视图部分而不是行。集合视图有2行,因此显示为以下屏幕截图(顺序依次为:顶行,底行,顶行,底行等)
但是,我需要像下面两个屏幕截图一样从左向右读取集合视图:
您能建议我如何在Swift中执行此操作吗?
答案 0 :(得分:0)
首先,我想如果您提供一个示例,如何对当前单元格进行分区(例如 section 0:a,b,c,d , section 1:e,f ,...)以及您希望如何显示/布置不同的部分。
我建议创建一个自定义UICollectionViewLayout子类。
在prepareLayout方法中,您应该为每个单元格计算并缓存UICollectionViewLayoutAttributes。
创建变量:
let xOffset = 0.0 // leftContentInset within collectionView.bounds
let yOffsetRow0 = 0.0 // y offset of first row within collectionView.bounds
let yOffsetRow1 = 50.0 // y offset of second row within collectionView.bounds
var currentXOffset : CGFloat = xOffset
var currentPage : Int = 0
CGRect(currentXOffset, yOffsetRow0, cellWidth, cellHeight)
,增加currentXOffset)currentXOffset = xOffset
currentPage += 1
currentXOffset = xOffset + (collectionView.frame.width * currentPage)
//用于下一页答案 1 :(得分:0)
如您所说,您需要 1.启用分页 2.从左向右滚动 3.多个部分。
这有点混淆了您到底要设计什么。如果可以共享适当的UI屏幕截图,那就更好了。
据我了解您的问题。
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
检查是否已将水平布局分配给collectionView。
答案 2 :(得分:0)
我要这样做的是:
1)以与现在相同的方式对数据进行排序,以便您的集合视图如下所示:
---------
|0|2|4|6|
---------
|1|3|5|7|
---------
2)在您的集合视图数据源的cellForIndexPath
方法中,返回正确的元素,以便您的集合视图变为:
---------
|0|1|2|3|
---------
|4|5|6|7|
---------
为此,您可以使用以下逻辑:
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
var elementIndex: Int!
if indexPath.row % 2 == 0 {
// 0 / 2 = 0
// 2 / 2 = 1
// 4 / 2 = 2, etc
elementIndex = indexPath.row / 2
}
else {
// (1 / 2) + round(8.0 / 2.0) = 4
// (3 / 2) + round(8.0 / 2.0) = 5
// (5 / 2) + round(8.0 / 2.0) = 6, etc
elementIndex = (indexPath.row / 2) + Int(round(Double(elements.count) / 2.0))
}
// Dequeue your cell
// let cell = ...
cell.element = elements[elementIndex]
return cell
}
基本上,这应该以正确的顺序返回元素。