Индекс представления быстрой коллекции вне диапазона, определяющего первую ячейку - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь установить, чтобы первая ячейка представления коллекции отличалась от остальных моих ячеек.Я вытаскиваю список постов из базы данных Firebase и пытаюсь сделать первую ячейку ячейкой создания с серым фоном, как на картинке ниже, но я получаю индекс вне диапазона.

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! HomeCell

    if indexPath.row == 1 {
        cell.backgroundColor = .lightGray
    } else {
        cell.list = lists[indexPath.item]

        cell.contentView.layer.cornerRadius = 5.0
        cell.contentView.layer.borderWidth = 1.5
        cell.contentView.layer.borderColor = UIColor.clear.cgColor
        cell.contentView.layer.masksToBounds = true
        cell.layer.shadowColor = UIColor.lightGray.cgColor
        cell.layer.shadowOffset = CGSize(width: 0, height: 2.0)
        cell.layer.shadowRadius = 1.0
        cell.layer.shadowOpacity = 1.0
        cell.layer.masksToBounds = false
        cell.layer.shadowPath = UIBezierPath(roundedRect: cell.bounds, cornerRadius: cell.contentView.layer.cornerRadius).cgPath

    }

     return cell
}

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return lists.count + 1
}

pic

1 Ответ

1 голос
/ 11 июня 2019
  1. Если вам нужны разные UIs для CreateCell и HomeCell, вам нужно создать для этого отдельный UITableViewCells.

  2. In tableView(_:cellForItemAt:) dequeue тип cell отдельно на основе indexPath.row.

  3. First row в tableView имеет indexPath as 0 и not 1

  4. Кроме того, вам нужно использовать self.lists[indexPath.row - 1] вместо self.lists[indexPath.row] для настройки HomeCell

Вот скомпилированный код, который я имею в виду,

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if indexPath.row == 0 {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CreateCell", for: indexPath) as! CreateCell
        cell.backgroundColor = .lightGray
        //configure your cell here...
        return cell
    } else {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "HomeCell", for: indexPath) as! HomeCell
        let list = self.lists[indexPath.row - 1]
        //configure your cell with list
        return cell
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...