code007
code007

Reputation: 2337

Programmatically remove the header of UITableView and automatically resizes the content to fill in the removed area

I have added a UIButton in the header section of the UITableView via the interface builder and would like to remove the access to the button in certain cases. I have tried to use the .hidden = TRUE property but it just hides the button from the view, leaving a white space behind. How do I programmatically remove the header of UITableView and have the table's content automatically resizes to fill in the removed header area?

Upvotes: 18

Views: 33408

Answers (4)

Luchi Parejo Alcazar
Luchi Parejo Alcazar

Reputation: 151

Check if your tableView has a grouped style, in that case a white space appears at the top of the table. Change the style to plain and that blank space will be removed. enter image description here

Upvotes: 0

Patrick Ridd
Patrick Ridd

Reputation: 493

I created a boolean property called removeHeader and then when ever I want to remove my header I call:

func removeSectionHeader() {
        removeHeader = true
        self.tableView.reloadData()
    }

Then when my tableView reloads it will call this tableView delegate method:

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if removeHeader {
            return 0.0
        } else {
            let height = self.tableView.sectionHeaderHeight
            return height
        }
    }

Upvotes: 0

mts
mts

Reputation: 608

You could also do:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 0.0;
}

This seems to work for my (single) section header and avoids the need for reloadData.

Note that:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

is still called, but its return value seems to be ignored.

Upvotes: 20

Bogatyr
Bogatyr

Reputation: 19323

If you want to remove the table's header view, just set the myTable.tableHeaderView property to nil. If what you have is actually a section header, then you need to return nil from the viewForHeaderInSection method and call [myTableView reloadData]

Upvotes: 56

Related Questions