使用Swift 3,我使用UITableViewHeaderFooterView
的子类(称为HeaderView
)作为TableView上的标题部分。
出列HeaderView
后,我自定义了
(1)设置textLabel.textColor = UIColor.red
,以及(2)向其添加子视图。
当应用程序首次加载时,表视图会加载标题,但它们(我假设是)“默认”视图(textLabel.textColor
为灰色,没有我添加的子视图)。当我开始滚动并开始出列更多HeaderViews时,HeaderViews开始正确显示,直到最终没有更多'默认'格式化HeaderViews。
应用程序的后续加载不再显示“默认”视图。
考虑的替代方案
HeaderView
成为子类来实现的
UITableViewCell
并从故事板中自定义它,但那样
似乎更像是一种使用原型单元的解决方法
为标题UITableViewHeaderFooterView
类
UITableViewHeaderFooterView
的子类
你要创建一个XIB文件(所以必须有一些原因..)任何评论/解答解释为什么会发生这种情况以及如何解决它真的很感激!
根据要求,我已经在代码中添加了以显示我已经完成的任务 - 您可以使用下面的代码重新创建问题,并且通常在Storyboard中设置TableViewController(Swift 3,Xcode 8.2,在iOS 10.2上模拟)对于iPhone 7)
ListTableViewController.swift
import UIKit
class ListTableViewController: UITableViewController {
// List of titles for each header
var titles: [String] {
var titles = [String]()
for i in 1...100 {
titles.append("List \(i)")
}
return titles as [String]
}
// Register view for header in here
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(ListHeaderView.self, forHeaderFooterViewReuseIdentifier: "Header")
}
// Table view data source
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let dequeuedCell = tableView.dequeueReusableHeaderFooterView(withIdentifier: "Header")
if let cell = dequeuedCell as? ListHeaderView {
cell.title = titles[section]
}
return dequeuedCell
}
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 44
}
override func numberOfSections(in tableView: UITableView) -> Int {
return titles.count
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 0
}
}
ListHeaderView.swift
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)
}
}
以下是灰色标题(初始加载时屏幕已满)以及滚动时开始显示的自定义红色标题的屏幕截图。
答案 0 :(得分:1)
对于任何感兴趣的人来说,似乎这是一个错误,此阶段的最佳解决方案是在tableView委托方法textColor
的标题视图上配置willDisplayHeaderView
等属性。在视图出现之前“最后一刻”执行此操作允许您覆盖系统尝试强制使用字体等的任何配置。
在此处找到答案 Troubles with changing the font size in UITableViewHeaderFooterView
答案 1 :(得分:0)
使用以下代码
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
}