意外 Header 使用 NSFetchedResultsController 在 UITableView 的部分中查看

Unexpected Header View in UITableView's section using NSFetchedResultsController

很容易看出,浅蓝色的是UITableViewHeaderFooterView,白色的是UITableViewCell.我使用 NSFetchedResultsController 从 CoreData 加载部分和组。每一个蓝色header是一个新的部分。

有时(不总是) 有一个 header 视图 而不是 table 查看单元格。为什么?

viewDidLoad我注册了header查看:

tableView.registerNib(UINib(nibName: "PBOUserWorkDayHeaderView", bundle: nil), forHeaderFooterViewReuseIdentifier: PBOUserWorkDayHeaderViewIdentifier)

更有趣的是,当我调试 View Hierarchy 时,您可以看到,有我的自定义单元格,刚好被 header 覆盖。为什么?

是iOS错误吗?你怎么看?渲染或我的思维方式有什么问题吗?

因为 headers 有问题,我创建了一个自定义方法来删除不必要的 headers 每次 tableView 请求 `viewForHeaderInSection:.

假设您知道如何将 header 与其他视图区分开来(在我的例子中,它们有自定义的 class)并且您知道 header 视图 tableView 直接子视图 您可以通过以下方式删除它们:

private func removeDoubledHeaders() {
    let subviews = tableView.subviews.reverse()

    var dates = [String]()
    for view in subviews {
        if let header = view as? PBOUserWorkDayHeaderView {
            if let date = header.dateLabel.text {
                if contains(dates, date) {
                    view.removeFromSuperview()
                } else {
                    dates.append(date)
                }
            }
        }
    }
}