I have a UICollection view which looks like this (see two purple and blue borders):

On iOS 10 there is no header/whitespace, but on iOS11 there is. I've tried everything mentioned here: How can I enable/disable section headers in UICollectionView programmatically?
And my code currently looks like this:
- (void) viewDidLoad
{
    [super viewDidLoad];
    autocompleteLayout = [[SQLProAutocompleteFlowLayout alloc] init];
    autocompleteLayout.headerReferenceSize = CGSizeZero;
    autocompleteCollectionView = [[UICollectionView alloc] initWithFrame: CGRectZero
                                                    collectionViewLayout: autocompleteLayout];
    autocompleteCollectionView.insetsLayoutMarginsFromSafeArea = NO;
    [self.view addSubview: autocompleteCollectionView];
    // removed layout code (leftAnchor, rightAnchor, topAnchor, bottomAnchor).
    autocompleteCollectionView.delegate = self;
    autocompleteCollectionView.dataSource = self;
    // Removed nib register code
    self.view.layer.borderColor = [UIColor redColor].CGColor;
    self.view.layer.borderWidth = 1;
    autocompleteCollectionView.layer.borderColor = [UIColor blueColor].CGColor;
    autocompleteCollectionView.layer.borderWidth = 2;
}
- (CGSize) collectionView: (UICollectionView *) collectionView
                   layout: (UICollectionViewLayout *) collectionViewLayout
referenceSizeForHeaderInSection:(NSInteger)section
{
    return CGSizeZero;
}
- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
referenceSizeForFooterInSection:(NSInteger)section
{
    return CGSizeZero;
}
And my FlowLayout looks like this:
- (void) setupLayout
{
    self.minimumInteritemSpacing = 0;
    self.minimumLineSpacing      = 0;
    self.scrollDirection         = UICollectionViewScrollDirectionVertical;
} // End of setupLayout
- (void) prepareLayout
{
    [super setItemSize: [self itemSize]];
    [super setSectionInset: [self sectionInset]];
    self.minimumLineSpacing = 0;
    [super prepareLayout];
} // End of prepareLayout
- (CGFloat) itemWidth
{
    return self.collectionView.frame.size.width;
}
- (CGSize) itemSize
{
    CGSize result = CGSizeMake(self.collectionView.frame.size.width,
                               rowHeight);
    return result;
}
- (void) setItemSize:(CGSize)itemSize
{
    self.itemSize = CGSizeMake(self.collectionView.frame.size.width,
                               rowHeight);
}
- (CGPoint) targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset
{
    return CGPointZero;
}
I have also verified that the UICollectionView's contentInset is zero'd out.
What am I missing? Why does my UICollectionView still have whitespace?
In iOS 11, there have been some changes to UIScrollView.
Try setting the contentInsetAdjustmentBehavior property
collectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
                        Try this:
 self.automaticallyAdjustsScrollViewInsets = false
    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
        return 0;
    }
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
    return 0;
}
- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
   return UIEdgeInsetsMake(-25,0,0,0);  // top, left, bottom, right
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With