我有一个UITableView
,其自定义节标题实现为UITableViewCell
。我的UITableViewDelegate
中的相关方法如下:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
log.debug("Creating header for section \(section)")
let headerCell = tableView.dequeueReusableCell(withIdentifier: "SectionHeaderCell") as! JournalEntrySectionHeaderTableViewCell
let keys = Array(self.journalEntries.keys.sorted())
let date = keys[section]
let dateFormatter = DateFormatter()
let template = "MMMMd, yyyy"
dateFormatter.setLocalizedDateFormatFromTemplate(template)
let dateStr = dateFormatter.string(from: date)
headerCell.titleLabel?.text = dateStr
let theme = ThemeManager.shared.currentTheme()
headerCell.backgroundColor = theme.entryListHeaderBackgroundColor
headerCell.titleLabel?.textColor = theme.entryListHeaderTextColor
return headerCell
}
一切正常呈现,看起来像这样:
但是,当我通过调用UITableViewCell
来删除self.entryTableView?.deleteRows(at: [indexPath], with: .automatic)
时,在执行动画之后,节标题将无法正确呈现。这是结果渲染:
您会在此屏幕截图中注意到,我从2019年3月9日部分删除了一行。这样做之后,2019年3月26日部分的部分标题将完全不呈现。如果我向下滚动表格然后向上滚动,则节标题将按预期正确显示。
我以前从未见过这样的事情,如果我删除自定义的viewForHeaderInSection
实现并简单地使用titleForHeaderInSection
,也不会发生这种情况。但是,这不是一个选择,因为我需要更改节标题的背景颜色以匹配我们的UI主题。有人遇到过吗?知道可能是什么问题吗?
答案 0 :(得分:0)
我认为可能存在2个潜在问题。
您能否在调用之前验证是否删除了dataSource元素
self.entryTableView?.deleteRows(at: [indexPath], with: .automatic)
let keys = Array(self.journalEntries.keys.sorted())
在删除元素后此键会更改吗?这可能导致意外行为。