ios - UITableView 的 tableViewHeader 和 tableViewCells 重叠,直到调用 reloadData

标签 ios swift uitableview uicollectionview autolayout

我有一个 TableView ,它有一个 tableViewHeader 和一个充满单元格的部分。

在我创建我的 UITableView 之前,我创建了一个名为 topSection 的 View ,它具有 View 的宽度和基于从我的 API 返回的文本的可变高度。

当我加载 View Controller 时,由于 API 调用正在进行中,我可以非常短暂地看到 topSection(即 UITableView.tableViewHeader)位于UITableViewCells。然后,当在我的 didSet 中调用 reloadData 以呈现表格 View 时,一切都会正确布局。

UITableView 添加到 UITableView 之前,我没有以任何方式限制 topSection

我还尝试将 topSectiontop 限制到 tableView top 但这没有用任何一个。

let listingsTableView = UITableView()
    listingsTableView.backgroundColor = .white
    listingsTableView.dataSource = self
    listingsTableView.delegate = self
    listingsTableView.rowHeight = 78
    listingsTableView.bounces = false
    listingsTableView.allowsSelection = false
    listingsTableView.tableHeaderView = topSection
    listingsTableView.register(ListingsHeaderView.self, forHeaderFooterViewReuseIdentifier: "HeaderView")
    listingsTableView.register(ListingsTableViewCell.self, forCellReuseIdentifier: "ListingsCell")
    view.addSubview(listingsTableView)

    constrain(listingsTableView, topSection) { tableview, topSection in
        tableview.top == tableview.superview!.top
        tableview.left == tableview.superview!.left
        tableview.right == tableview.superview!.right
        tableview.bottom == tableview.superview!.bottom
    }
    self.listingsTableView = listingsTableView

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

我认为您遇到了一个常见问题 - 表格不会在没有提示的情况下“自动调整”标题 View 的大小。

尝试将此添加到您的代码中(您可能需要更改 View 引用...):

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    sizeHeaderToFit()
}

func sizeHeaderToFit() {
    let headerView = theTableView.tableHeaderView!

    headerView.setNeedsLayout()
    headerView.layoutIfNeeded()

    let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height

    var frame = headerView.frame
    frame.size.height = height
    headerView.frame = frame

    theTableView.tableHeaderView = headerView
}

关于ios - UITableView 的 tableViewHeader 和 tableViewCells 重叠,直到调用 reloadData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43370526/

相关文章:

ios - coredata中两个NSDate之间的查询

ios - 从字典数组中搜索结果的最佳方法

ios - 如何在字符串上创建超链接并在 Facebook 中分享 [iOS]

ios - Epub 字体修改不起作用

swift - 如何删除或忽略 swift 编译器中的参数

ios - 快速扩展Tableview单元格如何调整高度

ios - GMSMarker iOS 问题

arrays - 数组创建导致 'Type of expression is ambiguous without more context'

ios - 展开/折叠在 Storyboard中工作正常但在 xib 中不工作

iOS7 - 搜索结果表格 View 向下推 20 像素