我正在开发基于this tutorial的测验应用。本教程假设所有问题都包含图像。但是,对于我的情况,并非所有问题都包含图像。所以我修改了QuizCVCell.swift,如下所示。如果imgName
为空,则不会设置图像。此外,如果没有图片,btn1
将直接放在lblQue
下。如果有图片,btn1
将被置于图片下方。
guard let unwrappedQue = question else { return }
lblQue.text = unwrappedQue.questionText
btn1.setTitle(unwrappedQue.options[0], for: .normal)
btn2.setTitle(unwrappedQue.options[1], for: .normal)
btn3.setTitle(unwrappedQue.options[2], for: .normal)
btn4.setTitle(unwrappedQue.options[3], for: .normal)
if unwrappedQue.imgName.isEmpty {
btn1.topAnchor.constraint(equalTo: lblQue.bottomAnchor, constant: 10).isActive=true
} else {
imgView.image = UIImage(named: unwrappedQue.imgName)
btn1.topAnchor.constraint(equalTo: imgView.bottomAnchor, constant: 10).isActive=true
}
这很好用,但是当我按下一步移动到下一个问题时会出现问题。如果当前问题不包含图像但下一个问题确实有图像,那么下一个问题中的图像将无法在更改单元格时显示。怎么解决这个?是否需要重置更改单元格上的UICollectionView
?
答案 0 :(得分:1)
每次使用constraint
时,都会添加新的NSLayoutConstraint
- 对象。细胞重复使用后,它们开始相互冲突。
您应该在awakeFromNib
- 方法中构造一次所有约束并存储其引用。然后根据图像优先级更改isActive
属性。