我有自定义UICollectionView
。我正在使用UIView
而不是UICollectionViewCell
因为我想在其他地方使用UIView
。
UICollectionView
仅水平滚动,有14个单元格;每个都以UIView
为内容。
在这个UIView
内是另一个UICollectionView,它包含一个UICollectionViewCell
,它只是一个骰子的图像。
所以:
UICollectionView
Cell
UIView
UICollectionView
和UICollectionViewCell
UICollectionViewCell
只是骰子的imageView
。我遇到的问题是,当UICollectionView
水平滚动时,单元格的内容在保持静态时会发生变化;有时它随机移动内容,或完全删除内容。
我不确定导致这种情况发生的原因。
如何在滚动时确保UICollectionView
保持其内容完好无损?
外UICollectionView
:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return allLocos?.count ?? 0
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell:OuterCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "OuterCollectionViewCell", for: indexPath) as! OuterCollectionViewCell
if cell.cardView == nil {
let arr = UINib(nibName: "CardView", bundle: nil).instantiate(withOwner: nil, options: nil)
let view = arr[0] as! CardView
cell.contentView.addSubview(view)
cell.cardView = view
}
if let locos = self.allLocos {
let loco:EYLocomotive = locos[indexPath.row]
print(indexPath.row, loco.name, loco.orders)
cell.engineCardView?.setup(loco:loco)
}
cell.layoutIfNeeded()
return cell
}
我认为问题是由这一行引起的:
cell.engineCardView?.setup(loco:loco)
我的UIView
(cardView)有以下代码:
@IBOutlet weak var diceCollectionView: UICollectionView!
var dice:[Int] = [Int]()
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func setup(loco:EYLocomotive) {
self.diceCollectionView.delegate = self
self.diceCollectionView.dataSource = self
self.diceCollectionView.allowsSelection = false
self.diceCollectionView.allowsMultipleSelection = false
self.diceCollectionView.isUserInteractionEnabled = false
self.diceCollectionView.showsVerticalScrollIndicator = false
self.diceCollectionView.showsHorizontalScrollIndicator = false
self.diceCollectionView.register(UINib(nibName: "EYDiceCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "EYDiceCollectionViewCell")
// add dummy dice for testing purposes only
for var _ in 1...3 {
let die = Die().roll
dice.append(die)
}
}
diceCollectionView是Dice Imagery的持有者。
当我们到达UICollectionViewDelegate时;在同一个文件中;
// MARK: Collection View Delegate
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return dice.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell: EYDiceCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "EYDiceCollectionViewCell", for: indexPath) as! EYDiceCollectionViewCell
let dieValue = self.dice[indexPath.row] as Int
let imageFile:String = "die-face-\(dieValue)"
cell.imageView.image = UIImage(named: imageFile)
cell.layoutIfNeeded()
return cell
}
UICollectionView运行正常,当我开始从视口水平滚动然后向后滚动时问题就出现了。
我想知道的是如何确保内容不会改变?
谢谢