每次滚动时都会重新加载tableView数据

时间:2018-09-25 07:42:38

标签: ios swift uitableview scroll

因此,每次我滚动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时都会调用它。 有任何想法吗?我觉得做另一种方法来使像元间距可能会解决此问题。

1 个答案:

答案 0 :(得分:0)

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

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