首页 > 解决方案 > 每次滚动时都会重新加载 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 时它都会被调用。有任何想法吗?我觉得做另一种方法来使单元格间距可能会解决这个问题。

标签: iosswiftuitableviewscroll

解决方案


UITableView 仅加载其当前显示的数据源部分。这极大地提高了 tableview 的性能,尤其是在数据源包含数千条记录的情况下。

因此,在滚动时重新加载数据源的所需部分是正常行为。


推荐阅读