Представление таблицы не использует ячейки повторно

#swift #tableview

Вопрос:

Когда я прокручиваю свою таблицу, ячейки, которые больше не отображаются, больше не появляются.

Ячейка зарегистрирована в viewDidLoad с кодом ниже:

 tableView.register(RepoTableViewCell.self, forCellReuseIdentifier: "cellId")
 

И на cellForRowAt я вызываю ячейку из табличного представления следующим образом:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! RepoTableViewCell
        
            cell.repo = viewModel.repos?[indexPath.row]
            
            cell.repoNameLabel.text = cell.repo?.name
        
        
        return cell
    }
 

Похоже, все в порядке, но когда я запускаю приложение, я получаю следующее поведение:

Когда я открываю приложение

When I scroll the table view down

Когда я повторно прокручиваю представление таблицы вверх

Если ячейка не отображается на экране, она удаляется и больше никогда не отображается.

Комментарии:

1. viewModel.repos?[indexPath.row] может быть, ноль. Кроме того, не должно быть необходимости звонить awakeFromNib вручную.

2. Нп. Кстати cell.repoNameLabel.text = cell.repo?.name , это немного странно, возможно, вы захотите сначала создать переменную: let repo = viewModel.repos?[indexPath.row] . Затем назначьте его: cell.repo = repo; cell.repoNameLabel.text = repo.name

3. зачем тебе звонить awakeFromNib() ?

4. ячейка.пробуждение от сна()? Для чего это нужно?

5. Похоже, с вашим источником данных табличного представления нет ничего плохого (за исключением проблем с вкладками, из-за которых мое ОКР сходит с ума). Проблема, вероятно, в ваших ограничениях на ячейку. Вы должны использовать contentView.layoutMarginsGuide для своих leading , trailing , top и bottom ограничений. Вы также можете использовать contentView.readableContentGuides их для leading того, trailing чтобы они выглядели немного более «читабельными» на больших устройствах. Если вы используете readableContentGuides , обязательно включите tableView.cellLayoutMarginsFollowReadableWidth = true viewDidLoad