在重新加载集合视图时,我遇到了一个奇怪的情况,在重新加载之前,我从源中删除所有对象,然后在调用集合上的重新加载数据之后提取它,由于某种原因,集合正在添加视图,但从不删除它们。(数据源没有重复数组总是正确的)
当我调用重新加载时:

        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/

10-15 15:35