Swift TableView崩溃:“缺少新显示行的单元格”

时间:2016-12-28 11:11:22

标签: ios swift uitableview tableviewcell heightforrowatindexpath

在向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高度,而不会遇到此崩溃。

0 个答案:

没有答案