tableView 部分 headers 消失 SWIFT

tableView section headers disappear SWIFT

我有一个 tableView 设置,当一个单元格被触摸时,它会扩展高度以显示更多信息。 table视图有 5 个部分。

我有一个错误:当一个单元格展开时,该单元格下面的所有 headersCells 都会变得不可见。控制台输出以下内容:“[31233:564745] 没有 table 正在重用的单元格的索引路径”

在我的故事板中,我有 2 个自定义单元格:"myCell" 用于数据承载单元格,"headerCell" 用于 headers。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

   let thisGoal : GoalModel = goalArray[indexPath.section][indexPath.row]


    if self.currentPath != nil && self.currentPath == indexPath  {
        self.currentPath = nil
    } else {
        self.currentPath = indexPath
    }
    tableView.beginUpdates()
    tableView.endUpdates()
}

如果我在 begin/end 更新之间输入 tableView.reloadData(),它可以正常运行,尽管 header 背景变黑并失去动画效果。

我在 func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

中声明了 header 的所有内容

我错过了什么?我非常希望 tableView 仍然有动画,并保留背景 clearColor()

提前致谢。我确实通读了 objective C 个答案,但无法让它们为我工作。我非常感谢 SWIFT 的帮助。

我认为问题是 table 单元格没有索引路径被重用。

我在控制台输出中找到了答案。在 header 函数中使用此代码:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 

不要 return 您的 headerCell 或您的可重复使用标识符。 Return reuseIdentifier.contentView。对我来说是:return headerCell!.contentView.

由于我还没有达到 50 声望,我无法对之前的答案发表评论,所以我很抱歉将此列为另一个答案。

返回 ContentView 将使该函数起作用,但会删除对 reuseIdentifier (headerCell) 所做的所有格式设置

headerCell.backgroundColor = UIColor.cyanColor()

这不会为您的 headerCell 提供青色

要解决此问题,只需将“.contentView”添加到您的格式行

headerCell.contentView.backgroundColor = UIColor.cyanColor()

补充一下,当我可以很清楚地看到它在那里时,为什么我不能引用我的单元格的 contentView,我感到困惑的时间比我应该的要长。我的自定义 class(使用 UITableViewCell 而不是 UITableViewHeaderFooterView)每次都会 return 出现致命错误。因此,请确保在 UITableViewHeaderFooterView class 下设置了任何自定义样式,例如:

class CustomHeaderCell: UITableViewHeaderFooterView {

您还需要像这样注册 resuableIdentifer:

tableView.registerNib(UINib(nibName: "HeaderCell", bundle: nil), forHeaderFooterViewReuseIdentifier: "CellHeader")

然后这个坏小子:

    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerCell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("CellHeader") as! CustomHeaderCell!
    return headerCell!.contentView
}

Table 在 2 table 秒内查看 headers 当我将我的应用程序转换为 IOS 时消失了 10 - 我在 Apple 开发人员中找到了原因 API关于 table headers 的文档。当我添加以下内容时,丢失的 headers 又出现了!

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
{
return 44 // where 44 is the header cell view height in my storyboard
}

我遇到了同样的错误,因为我 return 使用出列方法而不是 UITableViewHeaderFooterView 对单元格进行处理。

解决方案:

  • 在视图层次结构之外添加一个视图
  • 设置类型为UITableViewHeaderFooterView
  • 自定义
  • Link 到 @IBOutlet
  • func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?return出口

常见陷阱:

不要忘记设置页眉大小 不要忘记将插座设置为强。

您可以将 TableViewCell 包裹在 UIView

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
  let containerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 50)) // 50 = Header height

  guard let headerCell = tableView.dequeueReusableCell(withIdentifier: "MyHeaderView") as? MyHeaderView else { fatalError(" Failed to load MyHeaderView") }
  headerCell.frame = containerView.bounds
  containerView.addSubview(headerCell)

  return containerView
}