Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 某些自定义UITableViewCell未渲染_Ios_Swift_Xcode_Uitableview - Fatal编程技术网

Ios 某些自定义UITableViewCell未渲染

Ios 某些自定义UITableViewCell未渲染,ios,swift,xcode,uitableview,Ios,Swift,Xcode,Uitableview,我有一个自定义单元格UITableViewCell,有时当tableview加载时,我会得到缺少的单元格(内容视图根本不呈现的单元格)。当我使用reloadRowsAtIndexPath时,我会得到相当一致的这种行为(例如,当单元格使用的自定义对象被更新时).如果我在tableview上调用reloadData,我通常不会得到这种行为 以下是查看调试时的外观: 以下是该下的单元格(渲染精细): 我在cellForRowAtIndexPath中初始化单元格的方式通常是: 编辑-整个单元格的行索

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

以下是查看调试时的外观:

以下是该下的单元格(渲染精细):

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

编辑-整个单元格的行索引路径:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let reuseIdentifier = "WorkOrderListCell"
    let cell:WorkOrderListCell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier) as! WorkOrderListCell
如果我滚动tableview,使未渲染的单元格脱离屏幕,然后向后滚动,该单元格将渲染

我还通过在主队列闭包中包装我的reloadRowsAtIndexPath来确保我在主队列上,但这没有什么区别


我遗漏了什么?

有时第一次加载时表视图会出现问题。因此我建议重新加载两次表视图数据。您可以使用此扩展:

extension UITableView {
    func reloadDataWithAutoSizingCellWorkAround() {
        self.reloadData()
        self.setNeedsLayout()
        self.layoutIfNeeded()
        self.reloadData()
    }
}
在这个问题上可以找到

或者您可以直接拨打:

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

有时,第一次加载时表视图会出现问题。因此,我建议重新加载两次表视图数据。您可以使用此扩展:

extension UITableView {
    func reloadDataWithAutoSizingCellWorkAround() {
        self.reloadData()
        self.setNeedsLayout()
        self.layoutIfNeeded()
        self.reloadData()
    }
}
在这个问题上可以找到

或者您可以直接拨打:

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


问题是,我在单元格的内容视图中有一个不明确的约束。只有当我在委托方法中添加setNeedsLayout以重新加载行时,才会报告该约束。一旦发现,使用a断点并调试视图很容易找到。当我删除导致该问题的距离约束时,所有渲染问题都会出现es消失了。多亏@DionizB让我走上了一条好路。

问题是我在单元格的内容视图中有一个不明确的约束。只有当我在委托方法中添加setNeedsLayout以重新加载行时,它才被报告。一旦我发现,使用a断点并调试视图很容易找到。当我删除di时导致该问题的站姿约束,所有渲染问题都消失了。多亏@DionizB让我走上了一条好路。

在第一个屏幕截图上,inspector breadcrumbs显示您选择了
UITableView
,这意味着单元格根本没有渲染或渲染到屏幕外。您可能弄乱了约束,或者直接在某个地方修改单元格的边框或边框偏移量。您可以发布整个
cellForRowAt:
方法吗?您是否为单元格执行手动高度计算?我不执行手动高度计算,单元格高度是自定义的和静态的。不过,我想您可能会发现一些约束是问题所在。我刚刚注意到我在日志中收到了这样的警告:警告一次:检测到一种情况,其中约束含糊不清地建议tableview单元格的内容视图的高度为零。我们正在考虑无意的折叠,并使用标准高度。不过,我没有收到任何IB警告或单元格布局问题。我希望如此这段代码不会发布。根据你7年的经验,你应该知道创建DateFormatter非常昂贵,你应该只创建一次并重用。但是你在cellForRowAt中创建DateFormatter,facepalm@canister_exister-绝对正确。这是清理(以及除此之外的方便方法)生产前。在第一个屏幕截图上,inspector breadcrumbs显示您选择了
UITableView
,这意味着单元格根本没有渲染或渲染到屏幕外。您可能弄乱了约束条件,或者您直接在某处修改了单元格的帧或边界偏移量。您是否可以发布整个
cellForRowAt:
method?您是否对单元格执行手动高度计算?我不执行手动高度计算,单元格高度是自定义的和静态的。但我认为您可能发现了一些约束是问题所在。我刚刚注意到我在日志中收到此警告:仅警告一次:检测到约束存在的情况我们建议tableview单元格的内容视图的高度为零。我们正在考虑非故意的折叠,并改用标准高度。不过,我没有收到任何IB警告或单元格布局问题。我希望这段代码不会发布。根据您7年的经验,您应该知道创建DateFormatter非常昂贵您应该只创建一次并重用它。但是您在cellForRowAt中创建了DateFormatter,facepalm@canister_exister-绝对正确。这是清理(以及除此之外的方便方法)在生产之前,我可以调用ReaDebug一次,它会很好。问题是,我只需要重新加载我需要的单元格,而不会导致TabLVIEW的完全重载。那么,您可以考虑每次加载两行。或者可以使用<代码> PraseReFuffE(){Suth.PraseReFurUSEE()。//在这里,您使所有ui组件都为零}我感谢您花时间提供帮助,但这不是一个好的解决方案。:)不过,您确实让我走上了正确的道路。调用setNeedsLayout导致自动布局引擎向我发出一条约束冲突消息。@carbon_exister-这根本不是问题所在。发现问题时,它是对视图的一个模糊约束,在添加setNeedsLayout之前,该约束不会显示在调试器中。一旦我看到了这一点,并添加了一个断点,问题就显而易见了。我可以调用reloadData一次,它就会恢复正常。问题是,我只需要重新加载我需要的单元格,而不会导致TabLVIEW的完全重载。或者您可以使用
prepareforeuse(){super.prepareforeuse()//这里您将所有ui组件设为零}
我感谢您花时间提供帮助,但这是事实