UICollectionView 中的集合排序问题 属性
Problem with set ordering property In UICollectionView
我对 collectionView
有一个奇怪的问题,我有两个原型,第一个应该在 indexPath.row=0
中绘制,第二个应该创建四次。
第二个原型包含一个 UIView,用于保存使用 paintCode 应用程序创建的图标,以及一个文本标签。每个单元格还有四个图标。
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
switch indexPath.row {
case 0:
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell1", for: indexPath) as? ViewData {
return cell
}
case 1,2,3,4:
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell2", for: indexPath) as? ViewData {
switch indexPath.row {
case 1:
cell.dataIcon.is1stIcon = true
cell.title.text = "1"
case 2:
cell.dataIcon.is2ndIcon = true
cell.title.text = "2"
case 3:
cell.dataIcon.is3rdIcon = true
cell.title.text = "3"
case 4:
cell.dataIcon.is4thIcon = true
cell.title.text = "4"
default:
break
}
return cell
}
default:
break
}
return UICollectionViewCell()
}
问题是,所有文本都位于正确的位置(行),但是 indexPath.row=1
中的 1stIcon
将显示在 indexPath.row=3
中,而 3rtIcon
将显示在 indexPath.row=1
中。
首先我想问题可能出在图标上,但无论我在这些行中放什么,都有同样的错误倾向。
你怎么看它?
谢谢
问题发生在单元格出队时,您需要 re-set 在使用之前
所有内容
cell.reset()
switch indexPath.row {
case 1:
cell.dataIcon.is1stIcon = true
cell.title.text = "1"
case 2:
cell.dataIcon.is2ndIcon = true
cell.title.text = "2"
case 3:
cell.dataIcon.is3rdIcon = true
cell.title.text = "3"
case 4:
cell.dataIcon.is4thIcon = true
cell.title.text = "4"
default:
break
}
func reset() {
// show all of them
self.dataIcon.is1ndIcon = false
self.dataIcon.is2ndIcon = false
self.dataIcon.is3ndIcon = false
self.dataIcon.is4ndIcon = false
}
我认为你应该研究 [collectionViewLayout] 委托方法。
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {
// Specify the cell frame of row=1
if indexPath.row == 1 {
return CGSize(width: collectionView.bounds.width - 20, height: collectionView.bounds.height/4-5)
}
// Other...
return CGSize(width: (collectionView.bounds.width-40)/3 - 1, height: collectionView.bounds.width/3-5)
}
我对 collectionView
有一个奇怪的问题,我有两个原型,第一个应该在 indexPath.row=0
中绘制,第二个应该创建四次。
第二个原型包含一个 UIView,用于保存使用 paintCode 应用程序创建的图标,以及一个文本标签。每个单元格还有四个图标。
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
switch indexPath.row {
case 0:
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell1", for: indexPath) as? ViewData {
return cell
}
case 1,2,3,4:
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell2", for: indexPath) as? ViewData {
switch indexPath.row {
case 1:
cell.dataIcon.is1stIcon = true
cell.title.text = "1"
case 2:
cell.dataIcon.is2ndIcon = true
cell.title.text = "2"
case 3:
cell.dataIcon.is3rdIcon = true
cell.title.text = "3"
case 4:
cell.dataIcon.is4thIcon = true
cell.title.text = "4"
default:
break
}
return cell
}
default:
break
}
return UICollectionViewCell()
}
问题是,所有文本都位于正确的位置(行),但是 indexPath.row=1
中的 1stIcon
将显示在 indexPath.row=3
中,而 3rtIcon
将显示在 indexPath.row=1
中。
首先我想问题可能出在图标上,但无论我在这些行中放什么,都有同样的错误倾向。
你怎么看它?
谢谢
问题发生在单元格出队时,您需要 re-set 在使用之前
所有内容 cell.reset()
switch indexPath.row {
case 1:
cell.dataIcon.is1stIcon = true
cell.title.text = "1"
case 2:
cell.dataIcon.is2ndIcon = true
cell.title.text = "2"
case 3:
cell.dataIcon.is3rdIcon = true
cell.title.text = "3"
case 4:
cell.dataIcon.is4thIcon = true
cell.title.text = "4"
default:
break
}
func reset() {
// show all of them
self.dataIcon.is1ndIcon = false
self.dataIcon.is2ndIcon = false
self.dataIcon.is3ndIcon = false
self.dataIcon.is4ndIcon = false
}
我认为你应该研究 [collectionViewLayout] 委托方法。
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {
// Specify the cell frame of row=1
if indexPath.row == 1 {
return CGSize(width: collectionView.bounds.width - 20, height: collectionView.bounds.height/4-5)
}
// Other...
return CGSize(width: (collectionView.bounds.width-40)/3 - 1, height: collectionView.bounds.width/3-5)
}