意外 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)
}
}
}
}
}
很容易看出,浅蓝色的是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)
}
}
}
}
}