Erro grave para UICollectionViewFlowLayout: minimumInteritemSpacing e minimumLineSpacing no modo de rolagem horizontal

Estou enfrentando o seguinte bug comUICollectionView nomodo de rolagem horizontal (iOS 8, iOS 7, os únicos que eu testei).

Minha pergunta

Gostaria de ter sua opinião sobre esse bug e sobre como eu poderia resolvê-lo com elegância.

A configuração
UICollectionViewFlowLayout * layout ;
layout = [[UICollectionViewFlowLayout alloc] init] ;
layout.scrollDirection = UICollectionViewScrollDirectionHorizontal ;
layout.minimumInteritemSpacing = 5 ;
layout.minimumLineSpacing = 100 ;
O inseto

É difícil de explicar, mas farei o meu melhor. O erro ocorre quando as células no UICollectionView não têm os mesmos tamanhos.

quando todas as células têm o mesmo tamanho, fica assim

mas assim que uma das células tem um tamanho diferente das outras, fica assim

Então, parece que ele intercambia ominimumInteritemSpacing eminimumLineSpacing.

Link para um exemplo mínimo não útil

https://github.com/colasjojo/TEST_COLLECTION_VIEW_BUG

Mais código
#import "ViewController.h"
#import "MyCell.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *viewForCollectionView;
@property (nonatomic, assign, readwrite) NSInteger selectedIndex ;
@end

@implementation ViewController


//
//
/**************************************/
#pragma mark - Init
/**************************************/

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder] ;
    if (self)
    {
        [self configure] ;
    }
    return self ;
}


- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil] ;
    if (self)
    {
        [self configure] ;
    }
    return self ;
}


- (void)configure
{
    _selectedIndex = -1 ;
}




//
//
/**************************************/
#pragma mark - Life cycle
/**************************************/


- (void)viewDidLoad {
    [super viewDidLoad];


    UICollectionViewFlowLayout * layout ;
    layout = [[UICollectionViewFlowLayout alloc] init] ;
    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal ;
    layout.minimumInteritemSpacing = 5 ;
    layout.minimumLineSpacing = 100 ;



    UICollectionView * collectionView ;
    CGRect frame ;
    frame.size = self.viewForCollectionView.frame.size ;
    collectionView = [[UICollectionView alloc] initWithFrame:frame
                                        collectionViewLayout:layout] ;
    collectionView.dataSource = self ;
    collectionView.delegate = self ;
    collectionView.backgroundColor = [UIColor clearColor] ;

    [collectionView registerNib:[UINib nibWithNibName:NSStringFromClass([MyCell class])
                                               bundle:nil]
     forCellWithReuseIdentifier:@"MyCell"] ;



    [self.viewForCollectionView addSubview:collectionView] ;

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}



//
//
/**************************************/
#pragma mark - Datasourcing
/**************************************/


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 100 ;
}


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    MyCell * cell ;
    cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell"
                                                     forIndexPath:indexPath] ;

    cell.label.text = [@([indexPath indexAtPosition:1]) stringValue] ; ;
    return cell ;
}


- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    if ([indexPath indexAtPosition:1] == self.selectedIndex)
    {
        return CGSizeMake(200, 200) ;
    }
    else
    {
        return  CGSizeMake(110, 110) ;
    }
}


- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSMutableArray * indexes = [NSMutableArray new] ;
    if (self.selectedIndex >= 0)
    {
        [indexes addObject:[NSIndexPath indexPathForItem:self.selectedIndex inSection:0]] ;
    }
    if (self.selectedIndex != [indexPath indexAtPosition:1])
    {
        [indexes addObject:indexPath] ;
        self.selectedIndex = [indexPath indexAtPosition:1] ;
    }
    else
    {
        self.selectedIndex = -1 ;
    }

    [collectionView reloadItemsAtIndexPaths:indexes] ;
}


@end

questionAnswers(0)

yourAnswerToTheQuestion