在重新加载集合视图时,我遇到了一个奇怪的情况,在重新加载之前,我从源中删除所有对象,然后在调用集合上的重新加载数据之后提取它,由于某种原因,集合正在添加视图,但从不删除它们。(数据源没有重复数组总是正确的)
当我调用重新加载时:
viewModel.reloadActivities()
activityCollection.reloadData()
viewModel中的此方法获取数据并替换数据源使用的数组:
func reloadActivities() {
activities.removeAll()
fetchActivities()
}
以下是活动单元格:
func configure(with activity: Activity) {
self.displayActivityCell(with: activity)
}
func displayActivityCell(with activity: Activity) {
let background = UIView(frame: CGRect(x: 0, y: 0, width: contentView.frame.width, height: 100))
background.backgroundColor = #colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)
contentView.addSubview(background)
let label = UILabelFactory(text: activity.getMessage()).color(.black).draw()
contentView.addSubview(label)
label.topAnchor == background.topAnchor + 10
label.leadingAnchor == background.leadingAnchor
label.trailingAnchor == background.trailingAnchor
label.translatesAutoresizingMaskIntoConstraints = false
}
但这是结果,如果我调用重新加载X次。。。
Result when I call reload
有任何提示说明为什么重新加载的数据没有“清理”添加的contentView吗?
谢谢
最佳答案
因为对象和UI元素是分开的。重新加载数据仅用于数据。是否在视图控制器的cellForRow中的indexpath处调用configure(with activity: Activity)
?如果是,它将始终创建一个新的背景视图并将其添加到contentView的子视图中。
把background
和label移到cell的init方法怎么样。
在displayActivityCell
函数中,您应该只自定义正在更改的内容,例如。。。
func displayActivityCell(with activity: Activity) {
background.backgroundColor = #colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)
label.text = activity.getMessage()
}
关于swift - 从集合 View 重新加载数据时的多 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57148334/