Space Between Sections in UITableview

IosUitableviewSwiftLayout

Ios Problem Overview


I need to reduce the space between two sections ofUITableView . I looked at this question but the solution doesn't allow for my custom header view because it combines the space of the footer and header.

Here is a picture of the UITableView . The black color is the UITableView background color.

tableview screenshot

Ios Solutions


Solution 1 - Ios

Did you try override this function:

override func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}

Solution 2 - Ios

On iOS 15 you may want to reduce the sectionHeaderTopPadding

if #available(iOS 15.0, *) {
    tableView.sectionHeaderTopPadding = 0
}

Solution 3 - Ios

I think you can solve this by adjusting the footer view height to its min: in Storyboard or XIB.enter image description here

I don't know what you have written in your code for footer height. Sorry if I am wrong.

Possible duplicate of https://stackoverflow.com/questions/11445301/hide-footerview-in-iphone-tableview

Solution 4 - Ios

For Swift 4+ you need to implement these two methods

extension MyViewController : UITableViewDelegate {
    
    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return CGFloat.leastNormalMagnitude
    }
    
    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        return UIView()
    }
    
}

Solution 5 - Ios

For Swift 3

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return CGFloat.leastNormalMagnitude
}

Solution 6 - Ios

For Swift 5+:

There is some space for the headers and footers by default. That's why I was having the problem of setting an exact separation for the sections.

My solution to having a separation between 2 sections is the following:

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    if section == 0 {
        return 24
    } else if section == 1 {
        return 32
    } else {
        return 40
    }
}
    
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    nil
}
    
override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    nil
}
    
override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    CGFloat.leastNormalMagnitude
}

As you see for viewForFooterInSection and viewForHeaderInSection I needed to return nil.

In case you only want to change the footerHeight, just return CGFloat.leastNormalMagnitude for heightForHeaderInSection, and return the heights for each section in heightForFooterInSection.

Solution 7 - Ios

You need to use the method heightForHeaderInSection for defining the space between header & cell text. You can also change it depending on different sections for eg. at some sections you may need to show more distance & under some, you don't want to show gap. For such case you can use CGFLOAT_MIN which is 0.000001f. Giving you an example, how you can use different section with different header heights:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0 || section == 2)
    {
        return 55.0;
    }
    else
    {
        return CGFLOAT_MIN;
    }
}

Solution 8 - Ios

Along with the answer posted by Icaro I would like to add that you also need to implement the tableView:viewForFooterInSection: method returning nil for the section you want to remove the empty space below It will then become:

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 0.001f;
}

-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    return nil;
}

Solution 9 - Ios

TableView Delegate methods doesn't effect with float value is 0.0f. Try giving a value greater than that.

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 0.00001f;
}

- (UIView*)tableView:(UITableView*)tableView
viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

Solution 10 - Ios

Select the tableView in your storyboard/objectCode and ensure that the style is set to Plain, instead of Grouped. You can find this setting in the attributes "Inspector" tab.

let myTableView : UITableView = {
        let tableView = UITableView(frame: .zero, style: .plain)
        tableView.register(TableCellClass.self, forCellReuseIdentifier: "cellId")
        tableView.backgroundColor = UIColor(red: 123/255, green: 190/255, blue: 120/255, alpha: 1)
        tableView.separatorStyle = .none
        tableView.translatesAutoresizingMaskIntoConstraints = false
        return tableView
    }()

Solution 11 - Ios

This also may help :

override func viewDidLoad() {
	super.viewDidLoad()
	tableView.sectionHeaderHeight = UITableViewAutomaticDimension
}

Solution 12 - Ios

Rather than implementing the UITableViewDelegate methods and defining the sectionFooterHeight via CGFloat.leastNormalMagnitude, one can alternatively just

tableView.sectionFooterHeight = 0

and the spacing between sections while no footer is present will go away.

The mechanism is that by default this value is set to UITableView.automaticDimension.

As long as

  • it stays UITableView.automaticDimension
  • there are no delegate/dataSource methods that implement the configuration of footer i.e. titleForFooterInSection/viewForFooterInSection
  • table view's style is set to .grouped

then UITableView will deliberately insert a spacing between sections with no view.

You change sectionFooterHeight to 0, the magic goes away.

Solution 13 - Ios

In Xcode 13.2, you can adjust the height of the header and footer of sections in the storyboard - see screenshot below:

Height of Header and Footer of Sections in Xcode 13.2

Solution 14 - Ios

You can do it by implement the delegate heightForHeaderInSection & heightForFooterInSection.

The return vaule should not be 0, even if the SectionHeader or the height of SectionFooter is 0, it need a very small value, try CGFLOAT_MIN.

for my example:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
if (section == [self.dataArray indexOfObject:self.bannerList]) {
    return 46;
}
return CGFLOAT_MIN;

}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return CGFLOAT_MIN;
} 

Solution 15 - Ios

Work for me

tableView.sectionFooterHeight = 10
// ...

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return nil
}

https://i.stack.imgur.com/PpQ8w.png" width="300">

Solution 16 - Ios

I just simply had to reduce the top padding for the tableview section header:

tableView.sectionHeaderTopPadding = 0

Solution 17 - Ios

swift 5 iOS 15

self.tableView.estimatedSectionFooterHeight = 16.0 // spacing between Sections

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJoelView Question on Stackoverflow
Solution 1 - IosIcaroView Answer on Stackoverflow
Solution 2 - IosrockdaswiftView Answer on Stackoverflow
Solution 3 - IosSudhin DavisView Answer on Stackoverflow
Solution 4 - IosLadd.cView Answer on Stackoverflow
Solution 5 - IosharisView Answer on Stackoverflow
Solution 6 - IosFernando CardenasView Answer on Stackoverflow
Solution 7 - IosAshView Answer on Stackoverflow
Solution 8 - IosNicholas AllioView Answer on Stackoverflow
Solution 9 - IosMithra SingamView Answer on Stackoverflow
Solution 10 - Iosgsk_fsView Answer on Stackoverflow
Solution 11 - IospolarwareView Answer on Stackoverflow
Solution 12 - IosIsaaс WeisbergView Answer on Stackoverflow
Solution 13 - IosmaxMasView Answer on Stackoverflow
Solution 14 - IosMichaelMaoView Answer on Stackoverflow
Solution 15 - IosMirekView Answer on Stackoverflow
Solution 16 - IosEuan TraynorView Answer on Stackoverflow
Solution 17 - IosMaged MohammedView Answer on Stackoverflow