我为aUITableView
创建了一个自定义头视图。标题视图的类型是UITableViewCell
。我在故事板中实现了它,并将其添加到视图层次结构中,如下面的屏幕截图所示
这是我的UITableViewController代码
import UIKit
class SecondCustomTableViewController: UITableViewController {
@IBOutlet weak var customHeaderView: UITableViewCell!
let array = ["Row 1", "Row 2", "Row 3"]
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.register(SecondCustomTableViewController.self, forHeaderFooterViewReuseIdentifier: "Header")
self.tableView.dequeueReusableHeaderFooterView(withIdentifier: "Header")
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "\(array[indexPath.row])"
return cell
}
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 44
}
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
print("\(customHeaderView) -> Section: \(section)")
return customHeaderView
}
}
当我在模拟器中运行它时,它看起来像这样
我的问题是:为什么只为最后一个部分显示自定义头视图?
viewForHeaderInSection
方法中的print语句如下所示:Optional(<UITableViewCell: 0x7ff287802200; frame = (0 0; 375 44); clipsToBounds = YES; layer = <CALayer: 0x600000038d00>>) -> Section: 0
Optional(<UITableViewCell: 0x7ff287802200; frame = (0 0; 375 44); clipsToBounds = YES; autoresize = W; layer = <CALayer: 0x600000038d00>>) -> Section: 1
Optional(<UITableViewCell: 0x7ff287802200; frame = (0 176; 375 44); clipsToBounds = YES; autoresize = W; layer = <CALayer: 0x600000038d00>>) -> Section: 2
我还打开了可选的,使其成为非可选的,但其行为相同。正如print语句所示,
viewForHeaderInSection
方法被调用了三次,那么为什么头只出现在最后一部分?我希望有人能帮我。
每一个暗示都是高度赞赏的。
最佳答案
我认为这是因为无法复制ui元素,所以您要做的是将UITableViewCell的一个实例作为IBOutlet。你最好能在需要的时候创建你的视图。
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return tableView.dequeueReusableCell(withIdentifier: "Header") as! UITableViewHeaderFooterView
}
希望有帮助。对不起,我英语不好。
关于ios - 自定义HeaderView仅显示在最后一节中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41856808/