Ios UITableViewHeaderFooterView首次加载时不显示自定义

Ios UITableViewHeaderFooterView首次加载时不显示自定义,ios,swift,uitableview,Ios,Swift,Uitableview,在Swift 3中,我使用了UITableViewHeaderFooterView(称为HeaderView)的子类作为我的TableView的标题部分 退出HeaderView队列后,我通过 (1) 设置textlab.textColor=UIColor.red,以及(2)向其中添加子视图 当应用程序第一次加载时,表视图会加载标题,但它们有(我假设的是)默认视图(其中textlab.textColor为灰色,并且没有我添加的子视图)。当我开始滚动,它开始将更多的HeaderViews移出队列,

在Swift 3中,我使用了
UITableViewHeaderFooterView
(称为
HeaderView
)的子类作为我的TableView的标题部分

退出
HeaderView
队列后,我通过 (1) 设置
textlab.textColor=UIColor.red
,以及(2)向其中添加子视图

当应用程序第一次加载时,表视图会加载标题,但它们有(我假设的是)默认视图(其中
textlab.textColor
为灰色,并且没有我添加的子视图)。当我开始滚动,它开始将更多的HeaderViews移出队列,然后HeaderViews开始正确显示,直到最终不再有“默认”格式的HeaderViews

应用程序的后续加载不再显示“默认”视图

考虑的备选方案

  • 我知道这可以通过使我的
    HeaderView
    成为
    UITableViewCell
    并从情节提要中对其进行自定义,但是 似乎更像是一种解决方法,在有条件的情况下使用原型单元 为标题指定的
    UITableViewHeaderFooterView
  • 类似地,它也可以使用XIB文件完成,但即使在Xcode 8中 创建
    UITableViewHeaderFooterView
    的子类不允许 您需要创建一个XIB文件(因此一定有原因…)
任何解释为什么会发生这种情况以及如何解决这种情况的意见/答案都非常感谢

使现代化 根据要求,我在代码中添加了显示我所做的工作的代码-您可以使用下面的代码和在故事板中通常设置TableViewController的方法重新创建问题(Swift 3,Xcode 8.2,在iOS 10.2上模拟iPhone 7)

ListTableViewController.swift

斯威夫特

下面是灰色标题(初始加载时屏幕上满是标题)和自定义红色标题(滚动时开始出现)的屏幕截图

使用下面的代码

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let dequeuedCell : ListHeaderView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "Header") as? ListHeaderView

        cell.title = titles[section]
    cell.tittle.textcolor = uicolor.red
    return dequeuedCell
}

对于任何感兴趣的人来说,这似乎是一个bug,在此阶段的最佳解决方案是在tableView委托方法中的头视图上配置属性,例如
textColor
。在视图出现前的“最后一分钟”这样做,允许您覆盖系统试图强制字体等的任何配置

在这里可以找到答案

@TL777发布您的代码工作和UI屏幕截图。是的,需要更多的代码。感谢您查看@the_dahiya_boy--我已经包含了代码和屏幕截图。更新了谢谢@Avismardoesn不工作--我在返回前已尝试在出列单元格上设置这些属性,但问题仍然存在。@TL77将您的项目给我
import UIKit

class ListHeaderView: UITableViewHeaderFooterView {

    var title: String? {
        didSet {
            updateUI()
        }
    }
    
    private func updateUI() {
        textLabel?.textColor = UIColor.red
        textLabel?.text = title!
        let separatorFrame = CGRect(x: 0, y: frame.height-1, width: frame.width, height: 0.25)
        let separator = UIView(frame: separatorFrame)
        separator.backgroundColor = UIColor.red
        contentView.addSubview(separator)
    }

}
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let dequeuedCell : ListHeaderView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "Header") as? ListHeaderView

        cell.title = titles[section]
    cell.tittle.textcolor = uicolor.red
    return dequeuedCell
}