【发布时间】:2021-02-03 10:15:31
【问题描述】:
大家好,我需要在 collectionView 中水平滚动显示 2 个部分。
第一部分需要 10 个单元格,第二部分需要 9 个单元格
我已经实现了这种方式,但我不明白为什么当我选择第 2 节的单元格时,indexPath.item 的值是第 1 节的单元格的值
编辑
你看到我的collectionView有2个部分设置单元格像这样..我不需要显示这样的单元格,但我需要第1部分在第一行,它必须显示像这样的项目同一行 (0,1 2 3 4 5) 和底行的第 2 部分,并显示顶行的项目
我哪里做错了?
private func commonInit() -> Void {
backgroundColor = .clear
let cv = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout())
cv.backgroundColor = .clear
cv.delegate = self
cv.dataSource = self
cv.isPagingEnabled = true
cv.showsHorizontalScrollIndicator = false
addSubview(cv)
if let layout = cv.collectionViewLayout as? UICollectionViewFlowLayout {
layout.scrollDirection = .horizontal }
TimeSelectorCell.register(in: cv)
cv.anchor(top: topAnchor, leading: leadingAnchor, bottom: bottomAnchor, trailing: trailingAnchor)
}
func numberOfSections(in collectionView: UICollectionView) -> Int { 2 }
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if section == 0 { return 10 }
else { return 9 }
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: TimeSelectorCell.cellIdentifier, for: indexPath) as! TimeSelectorCell
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print(indexPath.item)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
.init(width: collectionView.frame.width / 4 , height: collectionView.frame.height / 2)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { 0 }
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { 0 }
【问题讨论】:
-
在 'didSelectItemAt' 中,您可以使用 "indexPath.section" 来检查它是哪个部分。只是为了确认这是否真的是问题。
-
@rana5ohaib 我试过了,它总是返回 indexpath.section 0 直到单元格 10 .. 问题是第 0 部分似乎被分成两行,然后第 1 部分开始.. 而我需要部分0 位于顶部,第 1 部分位于第 0 部分的下方
-
你需要实现一个自定义的 UICollectionViewLayout。对于水平流布局,它将首先从上到下填充,然后向右移动。由于您有两行,如 sizeForItemAt 中指定的那样,第 0 部分将从上到下填充,然后从右到左填充,第 1 部分也是如此。
-
你能创建一个示例项目吗?
-
@kAiN - 你想要第一个“部分”在“第一行”上包含单元格 0 到 9,第二部分在“第二行”上包含单元格 0 到 8?您希望各行彼此独立滚动吗?
标签: ios swift uicollectionview uicollectionviewcell sections