当向上滚动到底部然后再向上滚动时,我的集合视图单元格正在被修改。
在我的viewDidLoad中,我有一个Parse查询,它从数据库中获取所有值,然后从主线程调用reloadData。
在初始加载时,可正确显示可查看的单元格。
但是当我向下滚动时,加载了不可见的单元格,其中1/3显示不正确。
然后当我向上滚动到初始可查看单元格时,第一个单元格无法正确显示。
由于显示不正确,我的意思是在我的数据库中是一个用于对齐的字段。这可以保持中,左或右弦。
此值是我的图像和按钮应在单元格中对齐的方式。
这是我的cellForRow函数。
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell{
let cell: FeedThumbnail = collectionView.dequeueReusableCellWithReuseIdentifier("feed_cell", forIndexPath: indexPath) as! FeedThumbnail
//handle cell alignment
if(align[indexPath.row] == "left"){
//leave alignment as is for buttons
if(cell.picture.frame.origin.x == 0){
cell.picture.frame.offsetInPlace(dx: -75, dy: 0)
}
}
else if(align[indexPath.row] == "center"){
cell.holder_view.frame.offsetInPlace(dx: 105 - cell.holder_view.frame.origin.x, dy: 0)
//leave image as is
}
else if(align[indexPath.row] == "right"){
cell.holder_view.frame.offsetInPlace(dx: 220 - cell.holder_view.frame.origin.x, dy: 0)
cell.picture.frame.offsetInPlace(dx: 100 - cell.picture.frame.origin.x, dy: 0)
}
return cell
}
这是我的集合视图单元格的类
import UIKit
class FeedThumbnail: UICollectionViewCell {
@IBOutlet weak var picture: UIImageView!
@IBOutlet weak var comment_btn: UIButton!
@IBOutlet weak var heart_btn: UIButton!
@IBOutlet weak var rescip_btn: UIButton!
@IBOutlet weak var og_btn: UIButton!
@IBOutlet weak var name_lbl: UIButton!
@IBOutlet weak var holder_view: UIView!
}
答案 0 :(得分:1)
像Lumialxk和RPK所说。 我需要在修改它之前刷新单元格origin.x。
我想我并不明白细胞会以它们的方式重复使用。
解决方案是覆盖prepareForReuse并在修改之前将frame.origin.x设置回原始值。
导入UIKit
class FeedThumbnail:UICollectionViewCell {
@IBOutlet weak var picture: UIImageView!
@IBOutlet weak var comment_btn: UIButton!
@IBOutlet weak var heart_btn: UIButton!
@IBOutlet weak var rescip_btn: UIButton!
@IBOutlet weak var og_btn: UIButton!
@IBOutlet weak var name_lbl: UIButton!
@IBOutlet weak var holder_view: UIView!
override func prepareForReuse() {
picture.frame.origin.x = 0
holder_view.frame.origin.x = 0
super.prepareForReuse()
}
}
答案 1 :(得分:0)
cellFor...
中有条件,如下:
if(cell.picture.frame.origin.x == 0){...
如果某个单元格被重复使用,则"left"
但不满足您的条件,因此它的外观与重复使用之前的外观相同。你应该对此做点什么。以下是示例代码:
if(cell.picture.frame.origin.x == 0){
...
} else {
// make it a left cell
}