tableView section headers disappear SWIFT

前端 未结 6 1396
慢半拍i
慢半拍i 2020-12-13 18:01

I have a tableView set up so that when a cell is touched, it expands in height to reveal more information. The tableView has 5 sections.

I have a bug: when a cell e

相关标签:
6条回答
  • 2020-12-13 18:20

    Just to add, I was baffled for WAY longer than I should have been as to why I couldn't refer to the contentView of my cell, when I could quite clearly see it was there. My custom class (using UITableViewCell rather than UITableViewHeaderFooterView) would return a fatal error each time. Therefore make sure any custom styling is setup under UITableViewHeaderFooterView class like:

    class CustomHeaderCell: UITableViewHeaderFooterView {
    

    You will also need to register the resuableIdentifer like this:

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

    Then this bad boy:

        func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerCell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("CellHeader") as! CustomHeaderCell!
        return headerCell!.contentView
    }
    
    0 讨论(0)
  • 2020-12-13 18:23

    Table view headers in 2 tables disappeared when I converted my app to IOS 10 - I found the reason in Apple developer API documentation on table headers. When I added the following, the missing headers reappeared!

    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
    {
    return 44 // where 44 is the header cell view height in my storyboard
    }
    
    0 讨论(0)
  • 2020-12-13 18:31

    You could wrap the TableViewCell inside an 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
    }
    
    0 讨论(0)
  • 2020-12-13 18:38

    I found an answer in the console output. Use this code in the header function:

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

    Do not return your headerCell, or your reusable identifier. Return the reuseIdentifier.contentView. For me it's: return headerCell!.contentView.

    0 讨论(0)
  • 2020-12-13 18:38

    Since I'm not at 50 reputation yet, I can't comment on the previous answer, so I apologize for listing this as another answer.

    Returning the ContentView will make the function work but will remove all formatting done to the reuseIdentifier (headerCell)

    headerCell.backgroundColor = UIColor.cyanColor()
    

    This will NOT provide a Cyan color to your headerCell

    To fix this, just add the ".contentView" to your formatting lines

    headerCell.contentView.backgroundColor = UIColor.cyanColor()
    
    0 讨论(0)
  • 2020-12-13 18:40

    I had the same bug because I was returning a cell using dequeue method instead of a UITableViewHeaderFooterView.

    Solution:

    • Add a view outside of the view hierarchy
    • Set the type to UITableViewHeaderFooterView
    • Customize
    • Link to an @IBOutlet
    • In func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? return the outlet

    Common pitfalls:

    Don't forget to set the header sizes Don't forget to set the outlet as strong.

    0 讨论(0)
提交回复
热议问题