Reputation: 2337
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
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.
Upvotes: 0
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
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
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