ios - 每次滚动时都会重新加载 tableView 数据
问题描述
所以每次我滚动我的 tableView 时,它都会重新加载我觉得很荒谬的数据,因为重新加载数据没有意义,因为它没有被改变。所以我设置我的tableView如下:
func numberOfSections(in tableView: UITableView) -> Int {
return self.numberOfElements
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 6
}
我的单元格确实是自定义的,它们之间需要间距。我无法在我的单元格中添加额外的视图来伪造该间距,因为我有角半径并且它只会破坏它。所以我必须让每一行=一个部分并将间距设置为部分高度。
我的单元格有一个动态高度,当我点击“更多”按钮时可以改变它的高度,所以单元格会延伸一点。
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if self.segmentedControl.selectedSegmentIndex == 0 {
if self.isCellSelectedAt[indexPath.section] {
return self.fullCellHeight
} else {
return self.shortCellHeight
}
} else {
return 148
}
}
这是我设置单元格的方式:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = UITableViewCell()
if self.segmentedControl.selectedSegmentIndex == 0 {
cell = tableView.dequeueReusableCell(withIdentifier: String.className(CurrentDocCell.self)) as! CurrentDocCell
(cell as! CurrentDocCell).delegate = self
(cell as! CurrentDocCell).ID = indexPath.section
} else {
cell = tableView.dequeueReusableCell(withIdentifier: String.className(PromissoryDocCell.self)) as! PromissoryDocCell
}
return cell
}
所以我有一个segmentedControl,通过切换我可以呈现一个特定高度的单元格或另一个可扩展的单元格。
在我的 viewDidLoad 中,我只有 tableView 的这些设置:
self.tableView.registerCellNib(CurrentDocCell.self)
self.tableView.registerCellNib(PromissoryDocCell.self)
为了扩展单元格,我有这个委托方法:
func showDetails(at ID: Int) {
self.tableView.beginUpdates()
self.isCellSelectedAt[ID] = !self.isCellSelectedAt[ID]
self.tableView.endUpdates()
}
我在 cellForRowAt tableView 方法设置了一个断点,每次滚动我的 tableView 时它都会被调用。有任何想法吗?我觉得做另一种方法来使单元格间距可能会解决这个问题。
解决方案
UITableView 仅加载其当前显示的数据源部分。这极大地提高了 tableview 的性能,尤其是在数据源包含数千条记录的情况下。
因此,在滚动时重新加载数据源的所需部分是正常行为。
推荐阅读
- java - 如何在 Websphere 应用服务器中安装端点 URL 的 SSL 证书
- java - 如何替换 blueprint/context.xml 中加载的 cfg 文件中的文本值
- python - Python Selenium 下载不断点击 Firefox 下载对话框
- android - 在 Web 视图中通过链接运行布局
- jquery - 通过ajax加载带有html内容的JS文件
- javascript - 将重写添加到 htaccess 会忽略 javascript
- database - 如何在 Flutter 中使用 Floor 订阅数据库更改?
- c# - 如何在任何受支持的平台上部署 .NET Core 应用程序?
- ios - 如何调用get API请求进行搜索swift 5
- android - 比较 2 个 textview 值