使用NSFetchedResultsController在UITableView的部分中出现意外的标题视图

时间:2015-05-15 07:21:04

标签: ios swift xcode uitableview tableheader

enter image description here

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

有时(并非总是)有一个标题视图,而不是表格视图单元格。为什么?

viewDidLoad i中注册标题查看:

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

更有趣的是,当我调试视图层次结构时,您可以看到,我的自定义单元格已被标题覆盖。为什么呢?

enter image description here

这是iOS错误吗?你觉得怎么样?渲染或我的思维方式错了吗?

1 个答案:

答案 0 :(得分:2)

由于标题是一个问题,我每次tableView请求`viewForHeaderInSection时都创建了一个自定义方法来删除不必要的标题:。

假设您知道如何区分标题与其他视图(在我的情况下,他们有自定义类),并且您知道标题视图直接子视图 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)
                }
            }
        }
    }
}