我为aUITableView创建了一个自定义头视图。标题视图的类型是UITableViewCell。我在故事板中实现了它,并将其添加到视图层次结构中,如下面的屏幕截图所示
ios - 自定义HeaderView仅显示在最后一节中-LMLPHP
这是我的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
    }
}

当我在模拟器中运行它时,它看起来像这样
ios - 自定义HeaderView仅显示在最后一节中-LMLPHP
我的问题是:为什么只为最后一个部分显示自定义头视图?
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/

10-15 14:09