Разная высота для нескольких прототипов клеток - PullRequest
0 голосов
/ 26 мая 2019

Имеют 2 клетки-прототипа. Каждый должен быть разного размера. Так что у меня есть ячейка и ячейка1. Ячейка должна быть 40, а ячейка должна быть 75.

Я пытался использовать heightForRowAt - обнаружил, что это вызывается перед cellForRowAt

Мне надоело устанавливать высоту в раскадровке для каждой ячейки

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
       let cell = tableView.dequeueReusableCell(withIdentifier: "starshipCell", for: indexPath)
       let cell1 = tableView.dequeueReusableCell(withIdentifier: "starshipCell1", for: indexPath) as! SectionTableViewCell

       switch indexPath {
       case [4,0]:
           cell1.sectionLbl.text = "Armor".lowercased()
           cell1.detailTextLabel?.text = "Test"
           return cell1
       case [4,1]:
           cell.textLabel?.text = "Defensive Countermeasures"
           return cell
       case [4,2]:
           cell.textLabel?.text = "Shields"
           return cell
       case [11, 0]:
           cell.textLabel?.text = "Forward Arc"
           return cell
       case [11, 1]:
           cell.textLabel?.text = "Port Arc"
           return cell
       case [11, 2]:
           cell.textLabel?.text = "Starboard Arc"
           return cell
       case [11, 3]:
           cell.textLabel?.text = "Aft Arc"
           return cell
       case [11, 4]:
           cell.textLabel?.text = "Turret"
           return cell
       default:
           return cell
       }

      // return cell
   }

'Попытка удалить из очереди несколько ячеек для одного и того же индексного пути, что недопустимо. Если вам действительно нужно удалить из очереди больше ячеек, чем запрашивает табличное представление, используйте -dequeueReusableCellWithIdentifier: метод (без пути индекса). Идентификатор ячейки: starshipCell1, путь индекса: {длина = 2, путь = 0 - 0} '

Так что вышеприведенное работает отлично. Мне просто нужно настроить высоту строки для этих ячеек. Теперь код не завершен на 100%. Все вышеперечисленные случаи будут изменены и обновлены до cell1. Ошибка только когда я использую heightForRowAt

1 Ответ

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

В методе cellForRowAt вы можете удалить из очереди и вернуть только одну ячейку. Чтобы вернуть правильный путь с указанным индексным путем, обычная практика выглядит примерно так:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell: UITableViewCell
    if indexPath.row == 0 { // starshipCell only appears if it's the first row
        cell = tableView.dequeueReusableCell(withIdentifier: "starshipCell", for: indexPath)
    } else { // Otherwise, we use starshipCell1
        cell = tableView.dequeueReusableCell(withIdentifier: "starshipCell1", for: indexPath) as! SectionTableViewCell
    }

    // Set up the cell here

    return cell
}

Таким образом, dequeueReusableCell вызывается только один раз для каждой ячейки. (ошибка) heightForRowAt следует использовать аналогично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...