Проблема с установленным свойством упорядочивания в UICollectionView - PullRequest
0 голосов
/ 23 мая 2019

У меня странная проблема с collectionView, у меня есть два прототипа, первый должен нарисовать indexPath.row=0, а второй должен быть создан четыре раза. Второй прототип содержит один UIView для хранения значка, созданного с помощью приложения paintCode, и текстовую метку. У меня также есть четыре иконки для каждой ячейки.

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
switch indexPath.row {
case 0:
    if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell1", for: indexPath) as? ViewData {
        return cell
    }
case 1,2,3,4:
    if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell2", for: indexPath) as? ViewData {
        switch indexPath.row {
        case 1:
            cell.dataIcon.is1stIcon = true
            cell.title.text = "1"
        case 2:
            cell.dataIcon.is2ndIcon = true
            cell.title.text = "2"
        case 3:
            cell.dataIcon.is3rdIcon = true
            cell.title.text = "3"
        case 4:
            cell.dataIcon.is4thIcon = true
            cell.title.text = "4"
        default:
            break
        }

        return cell
    }
default:
    break
}
return UICollectionViewCell()

}

Проблема в том, что весь текст расположен в нужном месте (строке), но 1stIcon в indexPath.row=1 будет показано в indexPath.row=3, а 3rtIcon будет показано в indexPath.row=1. Сначала я подумал, что, возможно, проблема связана с иконками, но все, что я положил в этот ряд, имеет ту же неправильную тенденцию. Что вы думаете об этом? Спасибо

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Я думаю, вы должны поработать над методом делегирования [collectionViewLayout].

func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    sizeForItemAt indexPath: IndexPath) -> CGSize {
    // Specify the cell frame of row=1
    if indexPath.row == 1 {
        return CGSize(width: collectionView.bounds.width - 20, height: collectionView.bounds.height/4-5)
    }

    // Other...
    return CGSize(width: (collectionView.bounds.width-40)/3 - 1, height: collectionView.bounds.width/3-5)

}

0 голосов
/ 23 мая 2019

Проблема возникает из-за разгрузки ячейки, вам необходимо переустановить все перед использованием, как

  cell.reset()
    switch indexPath.row {
    case 1:
        cell.dataIcon.is1stIcon = true
        cell.title.text = "1"
    case 2:
        cell.dataIcon.is2ndIcon = true
        cell.title.text = "2"
    case 3:
        cell.dataIcon.is3rdIcon = true
        cell.title.text = "3"
    case 4:
        cell.dataIcon.is4thIcon = true
        cell.title.text = "4"
    default:
        break
  }

func reset() {
  // show all of them
  self.dataIcon.is1ndIcon = false
  self.dataIcon.is2ndIcon = false
  self.dataIcon.is3ndIcon = false
  self.dataIcon.is4ndIcon = false
}
...