在向tableview添加新行时遇到崩溃。简而言之,崩溃日志显示“新显示的第3行缺少单元格”。
生殖
1.向数据源添加N个对象
2.手动添加相同的金额
细胞到tableview
3.使用beginUpdates重新加载和动画 - endUpdates
已知问题
此次崩溃已在question进行了讨论,并在Apple报告。他们对这个问题的解决方案(不使用估计的细胞高度)对我不起作用,因为我需要2个不同的细胞高度。
我的tableview由2个不同的单元类组成。两者都有自己的标准高度,配置如下:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row % (straightsetLogs.count + 1) == 0 {
return 44
} else {
return tableView.rowHeight
}
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// (exerciseSets.count / straightsetLogs.count) = amount of (super)sets
// (straightsetLogs.count + 1) = amount of cells needed for 1 (super)set
return (exerciseSets.count / straightsetLogs.count) * (straightsetLogs.count + 1)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Headercell: 1 headercell for every (super)set
if indexPath.row % (straightsetLogs.count + 1) == 0 {
// Create header cells once for every set
let headerCell = tableView.dequeueReusableCell(withIdentifier: CellID.setHeaderCell, for: indexPath) as! SetHeaderTableViewCell
return configureHeaderCell(headerCell, forIndexPath: indexPath, totalCellsPerSet: straightsetLogs.count + 1)
} else {
// Create picker cells for rest of rows
let pickerCell = tableView.dequeueReusableCell(withIdentifier: CellID.setPickerCell, for: indexPath) as! SetPickerTableViewCell
// Configure according to set and movement
return configurePickerCell(pickerCell, forIndexPath: indexPath, totalCellsPerSet: straightsetLogs.count + 1)
}
}
在storyboard中我已经将tableview本身配置为行高为260.0,对于标题单元格我已经检查了自定义行高度框并将其设置为44.0。
当前状态
用于确定索引路径的正确单元格的代码可以正常工作,并且可以通过在indexPath代码中删除行的高度来解决崩溃问题。但后来我最终得到的所有细胞都是260.0高度。
目标
头部单元需要44.0高度,拾取器单元需要260.0高度,而不会遇到此崩溃。