如何在Objective-C中向UiCollectionView添加带有补充视图的Header?

时间:2017-09-16 13:44:58

标签: ios objective-c uicollectionview header

我有一个包含CollectionView的ViewController:

- (void)viewDidLoad
{
    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout new];
    collectionview = [[UICollectionView alloc]initWithFrame:CGRectZero collectionViewLayout:layout];
    collectionview.backgroundColor = [UIColor colorWithRed:0.86 green:0.86 blue:0.86 alpha:1.0];
    collectionview.translatesAutoresizingMaskIntoConstraints = false;
    collectionview.delegate = self;
    collectionview.dataSource = self;
    collectionview.bounces = true;
    [collectionview registerClass:[CollectionViewCell1 class] forCellWithReuseIdentifier:@"cell1"];
    [self.view addSubview:collectionview];
    [collectionview sdc_alignEdgesWithSuperview:UIRectEdgeAll];
    [collectionview registerClass:[RecipeCollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView"];
}

-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
    UICollectionReusableView *reusableview = nil;
    RecipeCollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView" forIndexPath:indexPath];
    headerView.backgroundColor = [UIColor greenColor];
    headerView.title.text = @"ABC";
    reusableview = headerView;

    return reusableview;
}

和RecipeCollectionReusableView是:

- (void)initialize
{
    _title = [UILabel new];
    _title.translatesAutoresizingMaskIntoConstraints = false;
    [self addSubview:_title];
    [_title sdc_centerInSuperview];
}

但运行后屏幕上没有任何标题。

2 个答案:

答案 0 :(得分:1)

您是否为标题执行了必要的实现?

https://developer.apple.com/documentation/uikit/uicollectionviewdelegateflowlayout/1617702-collectionview?language=objc

  

<强>的CollectionView:布局:referenceSizeForHeaderInSection:

     

返回值   标题的大小。如果返回size(0,0)的值,则不添加标头。

     

<强>讨论   如果未实现此方法,则流布局将使用其中的值   headerReferenceSize    用于设置标题大小的属性。   在布局期间,仅使用对应于适当滚动方向的大小。例如,对于垂直滚动方向,布局对象使用方法返回的高度值。 (在该实例中,标题的宽度将设置为集合视图的宽度。)如果相应滚动维度中的大小为0,则不添加标题。

答案 1 :(得分:0)

这篇文章完全帮助了我:

documentation