在 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
-endUpdates
和reloadData
方法),确保表视图的数据完全同步。
另外,请在您的 cellForRowAt
方法中使用 assert
ion。它对于开发目的很有用,并且可以避免使用 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 单元格
检查 indexPath 处的单元格是不是在屏幕 UICollectionView 上可见
从 -tableView:cellForRowAtIndexPath: 计算“indexPath”处的自定义 UITableViewCell 高度:?