我向服务器请求获取数据,然后将其数据设置到我的数组中以处理TableView。
有时一个问题或一个问题是,尽管服务器响应是一个空数据源数组也是一个空,但是一个单元格或几个单元格被冻结,但是单元格仍会堆叠。直到我关闭为止,它仍然在屏幕上。另外tableView contentOffset也被更改:
该屏幕截图显示了冻结的tableViewCell。但是dataSource数组的部分为空, numberOfRowsInSection 也等于0。
一些细节:
tableView.reloadData()
; 请帮我了解我错了
编辑:
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard let numberOfRowsInSection = items?.count else {
messageLabel?.text = messageText
return 0
}
return numberOfRowsInSection
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "Identifier", for: indexPath) as? CustomTableViewCell else { return UITableViewCell() }
// Cell settings
return cell
}
}
答案 0 :(得分:0)
我的猜测是您缺少数据源方法
optional func numberOfSections(in tableView: UITableView) -> Int
https://developer.apple.com/documentation/uikit/uitableviewdatasource/1614860-numberofsections
tableView中的节数。默认值为1。
当数组中有0个项目时,这应该会破坏您的实现。根据您的结构,它看起来可能类似于
override func numberOfSections(in tableView: UITableView) -> Int {
guard let arr = items else { return 0 }
return arr.count == 0 ? 0 : 1
}
答案 1 :(得分:0)
问题在这里:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "Identifier", for: indexPath) as? CustomTableViewCell else { return UITableViewCell() }
// Cell settings
return cell
}
您要返回一个单元而不会使其出队。
如果您自己实例化一个单元格,TableView将无法对其进行控制,因此在更新数据源后它将无法重用它。
请按以下方式更改您的代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Identifier", for: indexPath) as! CustomTableViewCell
// Cell settings
return cell
}
但是还要确保您可能在viewDidLoad中是registering之前的单元格。
类似:
tableView.register(CustomTableViewCell.self, forCellReuseIdentifier:"Identifier")