Collectionview Reloaddata功能不起作用

时间:2019-07-04 14:29:36

标签: swift uicollectionview reloaddata

我有一个collectionView,在其中显示带有UIButton的普通UICollectionViewCell。在另一个屏幕上,我有一个开关列表。无论何时进行这些更改,都会使用collectionView将更新发送到屏幕。当我关闭开关(并且dataSource被更新)时,我尝试使用reloadData函数重新填充collectionView。但是,按钮(单元格)显示在彼此的顶部。

我尝试使用reloadData,在Dispatch.main.async中进行操作,使collectionView无效,删除deleteSections函数并访问特定的单元格,然后使用cell.removeFromSuperView()将其删除。

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "identifier", for: indexPath)
        let name = PickingState.getSelectedFilterValues()[indexPath.row]
        let button = SelectionsItem(title: name, frame: createMockupButtonToGetFrame(name: name))

        print(name)

        cell.contentView.addSubview(button)
        cell.contentView.addConstraintsWithFormat(formatString: "H:|[v0]|", views: button)
        cell.contentView.addConstraintsWithFormat(formatString: "V:|[v0]|", views: button)

        return cell
    }

请期待要渲染的单元格,不要将它们放在另一个之上。

1 个答案:

答案 0 :(得分:0)

问题在这里

cell.contentView.addSubview(button)

由于单元格出队,您需要先清除所有按钮,然后才能添加

cell.contentView.forEach { 
  if $0.tag == 22 {
     $0.removeFromSuperview()
  }
}
let button = SelectionsItem(title: name, frame: createMockupButtonToGetFrame(name: name))
button.tag = 22
cell.contentView.addSubview(button)

也不要忘记

button.translatesAutoresizingMaskIntoConstraints = false