Причина отсутствия отображаемых ячеек в том, что
- Вы не зарегистрировали ячейку (как уже упоминалось @kirander)
- ваш вид таблицы вообще не имеет размера.
Вы не должны делать компоновку / геометрию в viewDidLoad
, потому что рамка и границы непредсказуемы во время вызова этого метода.
Вы можете использовать autolayout для подключения табличного представления к измерению внешнего вида или обновить фрейм в viewDidAppear
:
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .blue
print (self.view.bounds) // (0.0, 0.0, 0.0, 0.0)
self.tableView = UITableView(frame: self.view.bounds, style: .plain)
self.tableView.delegate = self
self.tableView.dataSource = self
self.view.addSubview(self.tableView)
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
print (self.view.bounds) // (0.0, 0.0, 375.0, 668.0)
self.tableView.frame = self.view.bounds
}
или, при использовании autolayout :
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .blue
print (self.view.bounds) // (0.0, 0.0, 0.0, 0.0)
self.tableView = UITableView(frame: self.view.bounds, style: .plain)
self.tableView.delegate = self
self.tableView.dataSource = self
self.view.addSubview(self.tableView)
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
super.viewDidLoad()
}