UICollectionView水平设置标题时应用程序崩溃

我在UICollectionView中很新。 我真的很难find解决办法。 我正在试图在3水平行中添加标题。 我正在使用集合视图stream布局。
这是我执行的代码:

- (void)awakeFromNib { self.collectionView.backgroundColor = [UIColor colorWithRed:204.0/255.0 green:204.0/255.0 blue:204.0/255.0 alpha:1.0]; self.collectionView.backgroundColor = [UIColor clearColor]; self.collectionView.backgroundView = [[UIView alloc] initWithFrame:CGRectZero]; UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; flowLayout.itemSize = CGSizeMake(130.0, 170.0); [self.collectionView setCollectionViewLayout:flowLayout]; // Register the colleciton cell [_collectionView registerNib:[UINib nibWithNibName:@"ORGArticleCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"ORGArticleCollectionViewCell"]; [self.collectionView registerClass:[_HeaderView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView"]; } #pragma mark - UICollectionViewDataSource methods - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { return 1; } - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { if (section == 0) { return [self.collectionData count]; } else if(section == 1) { return [self.collectionData1 count]; } else { return [self.collectionData2 count]; } } - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { ORGArticleCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ORGArticleCollectionViewCell" forIndexPath:indexPath]; cell.articleTitle.text = [self.collectionData objectAtIndex:[indexPath row]]; NSString *URL = [self.collectionImageData objectAtIndex:indexPath.row]; [cell.articleImage setImageWithURL:[NSURL URLWithString:URL] placeholderImage:[UIImage imageNamed:@"profile-image-placeholder"]]; cell.articleImage.contentMode = UIViewContentModeScaleToFill; cell.articlePrice.text = [self.collectionDataPric objectAtIndex:[indexPath row]]; return cell; } - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { NSDictionary *cellData = [self.collectionData objectAtIndex:[indexPath row]]; [[NSNotificationCenter defaultCenter] postNotificationName:@"didSelectItemFromCollectionView" object:cellData]; } - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { return 0; } - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section { return 0; } - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind: UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView" forIndexPath:indexPath]; UILabel *label = (UILabel *)[headerView viewWithTag:10]; if (!label) { label = [[UILabel alloc] initWithFrame:CGRectInset(headerView.bounds, 5, 5)]; label.tag = 10; label.font = [UIFont boldSystemFontOfSize:12]; label.textColor = [UIColor darkGrayColor]; [headerView addSubview:label]; } label.text = [NSString stringWithFormat:@"Section %d", indexPath.section]; return headerView; } - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section { CGSize headerSize = CGSizeMake(320, 44); return headerSize; } 

当我初始化标题视图时,我的应用程序崩溃viewForSupplementaryElementOfKind方法。
以下是崩溃日志:

终止由于未捕获的exception'NSInternalInconsistencyException'的应用程序,原因:'没有UICollectionViewLayoutAttributes实例为-layoutAttributesForSupplementaryElementOfKind:UICollectionElementKindSectionHeader在path{长度= 2,path= 0 – 0}“

你的代码的问题是[headerView addSubview:label]; 这仅在标签等于零时才被调用。 但每次调用viewForSupplementaryElementOfKind时都必须调用此语句。

用下面的代码更新你的viewForSupplementaryElementOfKind函数。

 - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind: UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView" forIndexPath:indexPath]; UILabel *label = (UILabel *)[headerView viewWithTag:10]; if (!label) { label = [[UILabel alloc] initWithFrame:CGRectInset(headerView.bounds, 5, 5)]; label.tag = 10; label.font = [UIFont boldSystemFontOfSize:12]; label.textColor = [UIColor darkGrayColor]; } label.text = [NSString stringWithFormat:@"Section %d", indexPath.section]; [headerView addSubview:label]; return headerView; }