Функция перезагрузки Collectionview не работает - PullRequest
1 голос
/ 04 июля 2019

У меня есть collectionView, где я отображаю обычный UICollectionViewCell с кнопкой UIB внутри.На другом экране у меня есть список переключателей.Всякий раз, когда они изменяются, обновление отправляется на экран с collectionView.Когда переключатель я выключил (и источник данных обновился), я пытаюсь использовать функцию 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 голосов
/ 04 июля 2019

Проблема здесь

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
...