UITableView: hide header from empty section
What if in – tableView:viewForHeaderInSection:
you return nil
if the section count is 0.
EDIT :
You can use numberOfRowsInSection
for obtaining the number of elements in the section.
EDIT:
Probably you should return nil also in titleForHeaderInSection
if numberOfRowsInSection
is 0.
EDIT: Did you implement the following method?
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
EDIT : Swift 3 example
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
switch section {
case 0:
if self.tableView(tableView, numberOfRowsInSection: section) > 0 {
return "Title example for section 1"
}
case 1:
if self.tableView(tableView, numberOfRowsInSection: section) > 0 {
return "Title example for section 2"
}
default:
return nil // when return nil no header will be shown
}
return nil
}
You have to set tableView:heightForHeaderInSection:
to 0 for the appropriate sections. This is something which changed fairly recently and got me in a couple places. From UITableViewDelegate
it says...
Prior to iOS 5.0, table views would automatically resize the heights of headers to 0 for sections where tableView:viewForHeaderInSection: returned a nil view. In iOS 5.0 and later, you must return the actual height for each section header in this method.
So you'll have to do something like
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
if ([tableView.dataSource tableView:tableView numberOfRowsInSection:section] == 0) {
return 0;
} else {
// whatever height you'd want for a real section header
}
}