#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
}
Похоже, все в порядке, но когда я запускаю приложение, я получаю следующее поведение:
Если ячейка не отображается на экране, она удаляется и больше никогда не отображается.
Комментарии:
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