1
// viewdidload register
[self.collectionView registerClass:[TestHeaderCollectionReusableView class]
            forSupplementaryViewOfKind:UICollectionElementKindSectionHeader
                   withReuseIdentifier:NSStringFromClass(NEHeaderCollectionReusableView.class)];

// viewForSupplementaryElementOfKind called
TestHeaderCollectionReusableView *view = [collectionView dequeueReusableSupplementaryViewOfKind:kind
                                                                                  withReuseIdentifier:NSStringFromClass(TestHeaderCollectionReusableView.class)
                                                                                         forIndexPath:indexPath];

在此处输入图像描述

在 iOS15 上,插入项目后

- (void)insertItem {
    [self.dataSourece.firstObject insertObject:@{
        @"title" : @"ins1"
    } atIndex:0];
    NSIndexPath * path= [NSIndexPath indexPathForItem:0 inSection:0];
    [self.collectionView insertItemsAtIndexPaths:@[path]];
}

在我插入一个项目后,它总是会在第一次重新创建 TestHeaderCollectionReusableView 。但在 iOS14 上,它将从缓存中提取。

不知道为什么。

4

1 回答 1

4

修复了 iOS 15 中的 UICollectionElementKindSectionHeader 崩溃

在我的 collectionView 中,我只使用标题。它适用于 iOS 14,但在 iOS 15 中崩溃。

应用程序在 AppDelegate 上崩溃,我收到此错误

*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“从 -collectionView:viewForSupplementaryElementOfKind:atIndexPath 返回的视图:与它所使用的元素类型不匹配。当被问及元素类型“UICollectionElementKindSectionHeader”的视图时,数据源将一个为元素类型“MyCollectionReusableView”注册的视图出队。

注册头

    collectionView.register(UINib(nibName: "MyCollectionReusableView", bundle: nil), forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "MyCollectionReusableView")

然后在 UICollectionViewDataSource 方法中

    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
        
        let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "MyCollectionReusableView", for: indexPath) as! MyCollectionReusableView
        headerView.backgroundColor = .red
        // Configure header view .....
        return headerView
    }

将 forSupplementaryViewOfKind: 和 ofKind: 从 "MyCollectionReusableView" 替换为 UICollectionView.elementKindSectionHeader

这对我有用。

于 2021-09-25T11:16:03.780 回答