ios - 一些自定义 UITableViewCells 没有呈现
问题描述
我有一个自定义单元格 UITableViewCell,有时当 tableview 加载时,我会丢失单元格(内容视图根本不呈现的单元格。当我使用 reloadRowsAtIndexPath 时,我会相当一致地得到这种行为(当单元格使用的自定义对象是例如更新)。如果我在 tableview 上调用 reloadData,我通常不会得到这种行为。
我在 cellForRowAtIndexPath 中对单元格的初始化是通常的模式:
编辑 - 整个 cellForRowAtIndexPath:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let reuseIdentifier = "WorkOrderListCell"
let cell:WorkOrderListCell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier) as! WorkOrderListCell
如果我滚动表格视图以使未呈现的单元格不在屏幕上,然后向后滚动,则单元格将呈现。
我还通过将我的 reloadRowsAtIndexPath 包装在主队列闭包中来确保我在主队列中,但这并没有什么不同。
我错过了什么?
解决方案
有时第一次加载时表格视图会出现问题。所以我建议重新加载 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()
推荐阅读
- javascript - TypeError:对象不是函数或其返回值不可迭代
- android - 为什么 marginBottom 在 Spinner 中不起作用?
- javascript - 如何在点击时执行功能和更改页面
- sqlite - 在 Sqlite 3.34 中执行 UPSERT 时出错 - 错误:“DO”附近:语法错误
- ios - 为什么目标 ViewController 在使用 'push' 样式连接到导航堆栈时没有被添加到导航堆栈中?
- ruby-on-rails - 如何进行查询以获取具有空属性的模型
- c# - 错误 MissingReferenceException:“GameObject”类型的对象已被销毁,但您仍在尝试访问它
- amazon-web-services - 如何每周调用一次 API Gateway API
- spring - Spring JPA MYSQL 字符编码区分大小写
- hibernate - 无法使用 ScrollableResults 批量获取结果集