0

In Main.storyboard my section header cell has a height of 50 I would change that programmatically by the method in my UITableViewController:

override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return normalCellHeight
}

At the same time, I was getting the error no index path for table cell being reused, so I used this post to fix my error.

But after I fixed that error using that post, now my section headers aren't resized to fit the view. It used to look like this, but now it looks like this. As you can see my section headers don't fit the height and go over the screen width-wise.

I know I can fix the height issue by setting the height of my section header cells in Main.storyboard to 76. But that's not ideal, since I want all my section header cells to fill up the entire height of the view and the height of each individual header cell would change from an iPhone 5 to an iPhone 6. And you can see, it doesn't fix the width issue, which is strange b/c the view's width and the header view's frame width are the same (seen below). If relevant here is my storyboard.

Code:

override func viewDidLoad() {
    super.viewDidLoad()
    normalCellHeight = (view.bounds.height - self.navigationController!.navigationBar.bounds.height - 15)/(CGFloat(self.dayOfWeek.count) + 1)
}

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    if section == lastCellIndex{
        let header = tableView.dequeueReusableCellWithIdentifier("allExpensesCell") as!AllExpensesCell
        let view = UIView(frame: header.frame)
        view.addSubview(header)
        return view
    } else{
        let header = tableView.dequeueReusableCellWithIdentifier("headerCell") as!
        SummaryHeaderTableViewCell
        header.delegate = self
        header.index = section
        let day = dayOfWeek[section]
        header.dayOfWeek.text = day.rawValue.uppercaseString
        header.dayOfWeek.backgroundColor = colorOfDay[day]
        header.totalCost.text = "$\(totalSpentPerDay[section])"
        header.totalCostView.backgroundColor = colorOfDay[day]
        let view = UIView(frame: header.frame)
        print("Header frame height: \(header.frame.height)")
        print("Header frame width: \(header.frame.width)")
        print("Screen width: \(view.bounds.width)")
        view.addSubview(header)
        return view
    }
}

override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    print("Header height: \(normalCellHeight)")
    return normalCellHeight
}

Console:

Header height: 76.0 //This prints 48 times
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header height: 76.0
Header frame height: 50.0 //These 3 lines print 7 times, which makes sense b/c I have 7 sections
Header frame width: 600.0
Screen width: 600.0
Header frame height: 50.0
Header frame width: 600.0
Screen width: 600.0
Header frame height: 50.0
Header frame width: 600.0
Screen width: 600.0
Header frame height: 50.0
Header frame width: 600.0
Screen width: 600.0
Header frame height: 50.0
Header frame width: 600.0
Screen width: 600.0
Header frame height: 50.0
Header frame width: 600.0
Screen width: 600.0
Header frame height: 50.0
Header frame width: 600.0
Screen width: 600.0
Community
  • 1
  • 1
14wml
  • 4,048
  • 11
  • 49
  • 97
  • Why are you creating a view and then adding the header to that view? Why not just return `header`? `UITableViewCell` is a subclass of `UIView` after all. – jDutton Jan 15 '16 at 20:06
  • b/c I was getting the error "no index path for table cell being reuse" and as this post suggested (http://stackoverflow.com/questions/12772197/what-is-the-meaning-of-the-no-index-path-for-table-cell-being-reused-message-i) I should return a UIView instead of UITableViewCell – 14wml Jan 15 '16 at 20:07
  • I'm guessing it has something to do with autolayout. Maybe you need to set your autoresize mask like this: `header.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]` and then make sure that `translatesAutoresizingMaskIntoConstraints = true` – jDutton Jan 15 '16 at 20:14

0 Answers0