17

I am using UITableView for a multi-section list. The issue I am seeing is a space above the cells of each section, even if I set tableView(_:heightForHeaderInSection:) to be 0. This occurs even when there is only one section and I set tableView(_:viewForHeaderInSection:) to be nil.

I have tried all other answers on StackOverflow relating to inset overrides/edge expanding but none have worked.

Example:

Screenshot of iOS table view. Above each section header is a gap which is the same colour as the table background.

Amja
  • 1,095
  • 8
  • 25

2 Answers2

34

Check if you are only seeing this issue on iOS 15. If so, this may be caused by the newly introduced UITableView.sectionHeaderTopPadding property. You will need to set this value to 0 in order to remove the spacing before section headings:

let tableView = UITableView()
tableView.sectionHeaderTopPadding = 0

// Etc.

This property is only available in iOS 15 so you will need an API check if building for earlier versions.

If you're not on iOS 15, this question has most of the answers to this issue.

Imanou Petit
  • 84,140
  • 26
  • 249
  • 211
Amja
  • 1,095
  • 8
  • 25
7

Another approach is to set the sectionHeaderTopPadding value found in UITableView's UIAppearance proxy, which ensures that the value will be applied to every instance of UITableView in your application:

if #available(iOS 15.0, *) {
    UITableView.appearance().sectionHeaderTopPadding = CGFloat(0)
}
Şafak Gezer
  • 3,697
  • 3
  • 42
  • 48