在 indexPath 处的行的 Tableview 高度崩溃

Posted

技术标签:

【中文标题】在 indexPath 处的行的 Tableview 高度崩溃【英文标题】:Tableview crash in height for row At indexPath 【发布时间】:2019-09-23 12:09:48 【问题描述】:

我正在实现一个带有 2 个 xib 文件的 tableview。 但在某些设备中,它的高度崩溃 rowAt: 功能(根据崩溃日志) 下面是我的代码

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
        if indexPath.row == 0 
            return 340.0
         else 
            return (contentHeights[indexPath.row] + 70)
        
    




  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    if indexPath.row == 0 
        let cell = tableView.dequeueReusableCell(withIdentifier: “customId1”, for: indexPath) as? customCell1
        if let details = Details
            print(detail)
                    
        cell?.selectionStyle = .none
        if cell == nil 
    print(“nil cell”)                
        
        return cell!
     else 
        let cell = tableView.dequeueReusableCell(withIdentifier:customId2, for: indexPath)  as? customCell2
        cell?.selectionStyle = .none

        if cell == nil 
            print(“nil cell”)
        
        return cell!
    

我在这个 cellforRow 中填充 wkweview 内容,然后在设置 tableview 内容时重新加载特定行。

虽然它在所有设备上都运行良好,但在 350 台设备中的 2 台设备上崩溃。

知道为什么会这样吗?

【问题讨论】:

通过这样做,您可以跳过错误但检查单元格为何变为空。如果 cell == nil print(“nil cell”) return UITableViewCell() return cell! 还检查​​ heightforRowAt contentHeights 是否具有该索引 【参考方案1】:

您确定表视图的状态(dataSource)与您的实际数据(不是dataSource)同步吗?

我从您的代码中看到的是,行高的计算涉及数组项访问。通过调用必要的方法重新加载表视图状态(例如beginUpdates-endUpdatesreloadData 方法),确保表视图的数据完全同步。

另外,请在您的 cellForRowAt 方法中使用 assertion。它对于开发目的很有用,并且可以避免使用 print 语句继续执行您的代码并可能导致未定义的行为。

【讨论】:

感谢您的帮助,从现在开始我将使用 assert。来到arrayItem,我在2 xib中实现webviews,其中数据将根据内容填充到webview中,我将计算高度并替换数组中的值。我检查了 rowForHeight 中的数组没有抛出空指针异常【参考方案2】:

通过这样做,您可以跳过错误但检查单元格为何变为空。并检查 heightforRowAt contentHeights 是否具有该索引

   if cell == nil 
        print(“nil cell”)
        return UITableViewCell()
    
    return cell!

【讨论】:

以上是关于在 indexPath 处的行的 Tableview 高度崩溃的主要内容,如果未能解决你的问题,请参考以下文章

获取 UITableView 中最近添加的行的 indexPath

如果当前部分单元格高度为零,则不会为后续部分调用索引路径处的行的 Collectionview 单元格

Segue 不传递正确的行的索引路径总是第 0 节

检查 indexPath 处的单元格是不是在屏幕 UICollectionView 上可见

获取有序数组中的 IndexPath

从 -tableView:cellForRowAtIndexPath: 计算“indexPath”处的自定义 UITableViewCell 高度:?