从 UITableView 中删除行会导致部分标题问题?
Posted
技术标签:
【中文标题】从 UITableView 中删除行会导致部分标题问题?【英文标题】:Deleting row from UITableView causes section header issues? 【发布时间】:2019-03-01 20:16:25 【问题描述】:我有一个UITableView
,其自定义部分标题实现为UITableViewCell
s。我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
一切都正确渲染,看起来像这样:
但是,当我通过调用self.entryTableView?.deleteRows(at: [indexPath], with: .automatic)
来删除UITableViewCell
时,在执行动画后,节标题未正确呈现。这是生成的渲染:
您会在此屏幕截图中注意到,我从 2019 年 3 月 9 日部分删除了一行。这样做之后,2019 年 3 月 26 日部分的部分标题根本不会呈现。如果我向下滚动表格然后向上滚动,则部分标题会按预期正确呈现。
我以前从未见过这样的事情,如果我删除我的自定义viewForHeaderInSection
实现并简单地使用titleForHeaderInSection
,它就不会发生。但是,这不是一个选项,因为我需要更改部分标题的背景颜色以匹配我们的 UI 主题。有没有人遇到过这个?知道可能是什么问题吗?
【问题讨论】:
您能否为调用self.entryTableView?.deleteRows(at: [indexPath], with: .automatic)
的函数添加代码?
【参考方案1】:
我可能认为可能存在 2 个潜在问题。
您能否在调用之前验证是否删除了 dataSource 元素
self.entryTableView?.deleteRows(at: [indexPath], with: .automatic)
let keys = Array(self.journalEntries.keys.sorted())
删除元素后此键会更改吗?这可能会导致意外行为。
【讨论】:
以上是关于从 UITableView 中删除行会导致部分标题问题?的主要内容,如果未能解决你的问题,请参考以下文章