我在控制器中有一个UITableView,在tableHeaderView中设置其viewDidLoad()属性

let headerView = tableView.dequeueReusableCellWithIdentifier("HeaderView") as! HeaderView
tableView.tableHeaderView = headerView

一切正常,直到我调用tableView.beginUpdates() / tableView.endUpdates()tableView.reloadData()为止。标头空间仍然存在,但是内容变为空白。

我究竟做错了什么 ?请提出建议。

最佳答案

==编辑于2016年10月12日==

您不应该使标题视图出队。而是使用view属性,并将该视图分配为tableview的headerview:

class SomeViewController: UIViewController {
    // MARK: - Outlets
    @IBOutlet var tableView: UITableView!

    // MARK: - Properties
    var headerView: UIView!

    // MARK: - Lifecycle Methods
    override func viewDidLoad() {
        super.viewDidLoad()
        headerView = HeaderView()
        tableView.headerView = headerView
    }
}

==原始答案-无法解决问题==

您不应将headerview放在viewDidLoad上。而是在委托中创建并返回标头(以下代码假定您有一个部分)。

重要提示:您需要调用dequeueReusableHeaderFooterViewWithIdentifier而不是dequeueReusableCellWithIdentifier
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView = tableView.dequeueReusableHeaderFooterViewWithIdentifier("HeaderView") as! HeaderView
    return headerView
}

关于ios - UITableView header 隐藏在Swift中的beginUpdates()上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36857778/

10-15 17:08