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