一些自定义UITableViewCells无法呈现

时间:2018-12-12 13:39:48

标签: ios swift xcode uitableview

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

这是视图调试时的外观: Content View is missing

这是该单元格下面的单元格(很好): ContentView rendered

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

编辑-整个cellForRowAtIndexPath:

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

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

我还通过将reloadRowsAtIndexPath包裹在主队列中来确保自己在主队列中,但这没有什么区别。

我想念什么?

2 个答案:

答案 0 :(得分:2)

有时,第一次加载时表格视图存在问题。所以我建议两次重新加载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()

答案 1 :(得分:0)

问题是我在单元格的内容视图中存在一个模糊的约束。仅当我在委托方法中添加setNeedsLayout以重新加载该行时才得到报告。一旦发现这一点,就很容易使用断点并调试视图。当我删除引起问题的距离约束时,所有渲染问题都消失了。感谢@DionizB帮助我走上了一条好路。