首页 > 解决方案 > 一些自定义 UITableViewCells 没有呈现

问题描述

我有一个自定义单元格 UITableViewCell,有时当 tableview 加载时,我会丢失单元格(内容视图根本不呈现的单元格。当我使用 reloadRowsAtIndexPath 时,我会相当一致地得到这种行为(当单元格使用的自定义对象是例如更新)。如果我在 tableview 上调用 reloadData,我通常不会得到这种行为。

这是查看调试时的样子: 缺少内容视图

这是它下面的单元格(渲染得很好): 呈现的 ContentView

我在 cellForRowAtIndexPath 中对单元格的初始化是通常的模式:

编辑 - 整个 cellForRowAtIndexPath:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let reuseIdentifier = "WorkOrderListCell"
    let cell:WorkOrderListCell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier) as! WorkOrderListCell

如果我滚动表格视图以使未呈现的单元格不在屏幕上,然后向后滚动,则单元格将呈现。

我还通过将我的 reloadRowsAtIndexPath 包装在主队列闭包中来确保我在主队列中,但这并没有什么不同。

我错过了什么?

标签: iosswiftxcodeuitableview

解决方案


有时第一次加载时表格视图会出现问题。所以我建议重新加载 tableView 数据两次。你可以使用这个扩展:

extension UITableView {
    func reloadDataWithAutoSizingCellWorkAround() {
        self.reloadData()
        self.setNeedsLayout()
        self.layoutIfNeeded()
        self.reloadData()
    }
}

在这个问题中找到了https://github.com/smileyborg/TableViewCellWithAutoLayoutiOS8/issues/10

或者您可以直接拨打电话:

self.reloadData()
self.setNeedsLayout()
self.layoutIfNeeded()
self.reloadData()

推荐阅读