How to prevent header view to overlap top cell in UICollectionView?

I'm facing an issue where the header in a collection view is hiding part of the cell when an index title is selected.

It's important to indicate that the headers on the collection view are sticky.

For example, when "0" is selected, the following appears:

While I expect the following:

Notice that on the first screenshot the "0" section header is hiding the first line of the cell (which is "---- Cell Title ----").

I uploaded a sample app to Github that clearly demonstrates this issue. See https://github.com/yoasha/CollectionViewDemo

To reproduce, run the project with any iPhone simulator, select the "Collection View" option on the main page, and then tap the "0" or "1" index title.

For comparison with table view behavior, the sample app allows to select "Table View" on the main page. After that, selecting any index title will show a proper behavior of the table view in contrast to the collection view.

Any suggestions on how to fix this?

Following is the entire implementation of my collection view, which is also available on the above Github link.

@implementation MyCollectionViewController

static NSString * const reuseIdentifier = @"Cell";

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UICollectionLayoutListConfiguration *config = [[UICollectionLayoutListConfiguration alloc] initWithAppearance:UICollectionLayoutListAppearancePlain];
    config.headerMode = UICollectionLayoutListHeaderModeSupplementary;
    self.collectionView.collectionViewLayout = [UICollectionViewCompositionalLayout layoutWithListConfiguration:config];

    // Register cell classes
    [self.collectionView registerClass:[UICollectionViewListCell class] forCellWithReuseIdentifier:reuseIdentifier];
    
    [self.collectionView registerClass:[MyCollectionReusableViewHeader class]
            forSupplementaryViewOfKind:UICollectionElementKindSectionHeader
                   withReuseIdentifier:@"header"];

}

#pragma mark <UICollectionViewDataSource>

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return self.dataModel.count;
}


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return self.dataModel.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
    
    UIListContentConfiguration *config = [((UICollectionViewListCell *)cell) defaultContentConfiguration];
    config.text = @"----- Cell Title -----\nsome info\nsome info\nsome info";
    cell.contentConfiguration = config;
    
    return cell;
}

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {

    if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {
        MyCollectionReusableViewHeader *header = [self.collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader
                                                                                         withReuseIdentifier:@"header"
                                                                                                forIndexPath:indexPath];
        header.text = self.dataModel[indexPath.section];
        return header;
    }
    
    return nil;
}

- (NSArray<NSString *> *)indexTitlesForCollectionView:(UICollectionView *)collectionView {
    return self.dataModel;
}

- (NSIndexPath *)collectionView:(UICollectionView *)collectionView indexPathForIndexTitle:(NSString *)title atIndex:(NSInteger)index {
    return [NSIndexPath indexPathWithIndex:index];
}

@end

self.dataModel is NSArray<NSString *> * assigned with @[@"0", @"1", @"2", @"3", @"4"]

I also found a report of this issue at UICollectionView: https://stackoverflow.com/questions/70385294/uicollectionview-how-can-you-make-the-index-fast-scroll-to-the-section-header-i

Dif you try to set the height, with:

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        20
}

That's Swift but easy to adapt to objC

Facing same issue on iPhone 12pro. Did you find out solution over this?

How to prevent header view to overlap top cell in UICollectionView?
 
 
Q