因此,每次我滚动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时都会调用它。 有任何想法吗?我觉得做另一种方法来使像元间距可能会解决此问题。
答案 0 :(得分:0)
UITableView仅加载其数据源中当前显示的那部分。这极大地提高了表视图的性能,尤其是在数据源包含数千条记录的情况下。
因此,滚动时重新加载数据源的所需部分是正常的行为。