UICollectionView Header Header Crash iOS 8

I have a subclass of UIView that has a dynamically created UICollectionView. Everything works fine in ios7, displaying the headers is just fine.

iOS 8 does not call this method at all, and the application crashes.

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

If I comment on this method and I set the size of the header / footer to 0, iOS 8 no longer breaks.

Here is the code to create the collection:

int spacing = 39;

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.itemSize = CGSizeMake(199, 60);
if (IS_IOS8) layout.estimatedItemSize = CGSizeMake(199, 60);
layout.scrollDirection = UICollectionViewScrollDirectionVertical;
layout.minimumInteritemSpacing = 1;
layout.minimumLineSpacing = 1;
layout.sectionInset = UIEdgeInsetsMake(1,1,1,1);
layout.headerReferenceSize = CGSizeMake(self.width - spacing*2, 50.0f);
layout.footerReferenceSize = CGSizeZero;

self.collectionView=[[UICollectionView alloc] initWithFrame:CGRectMake(spacing, 5, self.width - spacing*2, self.height - spacing*2) collectionViewLayout:layout];

self.collectionView.dataSource = self;
self.collectionView.delegate = self;

[self.collectionView registerClass:[OCEListCell class] forCellWithReuseIdentifier:CellIdentifier];
[self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:HeaderCellIdentifier];
[self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:FooterCellIdentifier];
self.collectionView.backgroundColor = [UIColor clearColor];


[self addSubview:self.collectionView];

Data Source Methods:

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
    UICollectionReusableView * view = nil;

    NSLog(@"viewForSupplementaryElementOfKind");
    if ([kind isEqualToString:UICollectionElementKindSectionHeader] )
    {
        view = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:HeaderCellIdentifier forIndexPath:indexPath];
        view.backgroundColor = [UIColor clearColor];

        UILabel * lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 15, view.width, 40)];
        lbl.textColor = [UIColor defaultTextColor];
        lbl.font = [UIFont bookFontOfSize:25.0f];
        lbl.numberOfLines = 1;
        lbl.text = indexPath.section == 0 ? @"Section 1 Header" : @"Section 2 Header";
        [view addSubview:lbl];
    }
    else if ([kind isEqualToString:UICollectionElementKindSectionFooter])
    {
        view = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:FooterCellIdentifier forIndexPath:indexPath];
        view.backgroundColor = [UIColor clearColor];
    }

    NSLog(@"viewForSupplementaryElementOfKind:%@", view);
    return view;
}



-(CGSize) collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
{
    CGSize size = CGSizeMake(collectionView.width, 50);
    NSLog(@"referenceSizeForHeaderInSection: %@", NSStringFromCGSize(size));
    return size;
}


-(CGSize) collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section
{
    CGSize size = CGSizeZero;
    NSLog(@"referenceSizeForFooterInSection: %@", NSStringFromCGSize(size));
    return size;
}
+4
source share
1 answer

, , , , .

:

if (IS_IOS8) layout.estimatedItemSize = CGSizeMake(177, 60);

, , .. .

+1

All Articles