5
votes

I have created a table view header using the answer here.

My problem is that when creating the header this way, it does not "stick" to the top of my UITableView when scrolling down. If I create my header in code inside of viewForHeader then it does stick.

How can I get my header to stick to the top while scrolling if I create it in storyboard? 2 other askers here and here asked this question and never got an answer.

And yes my UITableView is already plain style, not grouped.

2
Connect the headerView to your view controller and implement scrollViewDidScroll: method. Then set the frame origin y of the header view offsetting by the scrollview offset. - Sandeep
The reason for the difference in behavior is that creating a header by dragging in a view in IB creates a tableHeaderView, whereas using viewForHeader creates a section header. They are two different things. - rdelmar
While Adam's answer below works, the Apple approved way is to create a NIB file with the desired view. What a PITA. - David H

2 Answers

6
votes

rdelmar's comment helped me understand the reasoning behind it not working. Here is what I did in practice to fix the problem:

I had to drag the header view in storyboard down by where the first responder is. You'll notice you can't actually drag the header view down on the view itself, you'll have to drag the element down from the document outline.

I also had to implement viewForHeaderInSection (returning the header view that I made an outlet) and heightForHeaderInSection.

Every time you want to edit the view via storyboard, you'll have to drag it back up to edit it, then drag it back down so it works correctly.

1
votes

Just drag tableview cell first, then your view for the header above. And afterward, remove the unneeded cell. The header will remember its position.