我正在做一个项目,用UICollectionView来展示几张专辑.这些项目显示得很好,但现在我想在第一部分上方显示一个标题.

为此,我在init方法中添加了registerNib:forSupplementaryViewOfKind:withReuseIdentifier:.这样地:

[self.collectionView registerNib:[UINib nibWithNibName:@"AlbumHeader" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:kAlbumHeaderIdentifier];

(AlbumHeader Nib包含类AlbumHeader的视图,它是UICollectionView的子类.)

之后,我实施了collectionView:viewForSupplementaryElementOfKind:atIndexPath种方法:

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
    return [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:kAlbumHeaderIdentifier forIndexPath:indexPath];
}

现在,我想它应该try 加载header视图.但事实并非如此,辅助视图的方法不会被调用.

我错过了什么?被困了几个小时,我已经多次阅读了UICollectionView年代的文档,但似乎没有任何帮助.有什么 idea 吗?

推荐答案

在查找yuf询问的方法后,我了解到默认情况下页眉/页脚的大小为0,0.如果大小为0,则不会显示页眉/页脚.

可以使用属性设置大小:

flowLayout.headerReferenceSize = CGSizeMake(0, 100);

那么所有的标题都将具有相同的大小.如果每个部分必须不同,可以实现以下方法,这是UICollectionViewDelegateFlowLayout协议的一部分.

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {
    if (section == albumSection) {
        return CGSizeMake(0, 100);
    }

    return CGSizeZero;
}

请注意,在垂直滚动中,它使用返回的height和集合视图的全宽;在水平滚动中,它使用返回的width和集合视图的全高.

Objective-c相关问答推荐

恢复 iOS7 之前的 UINavigationController pushViewController 动画

在 Objective-C 中完成受保护属性的解决方法

使用自动布局自定义纵横比

Xcode 中架构的重复符号

为 iphone 应用程序设置自动构建服务器的最佳实践?

如何使用键值编码判断对象是否存在键?

iOS:将 URL 解析为段

主队列上的 dispatch_sync 在单元测试中挂起

自定义 UINavigationBar 背景

Objective C - 如何连接整个字符串数组?

如何在 Objective-C 中将 NSString 解析为 BOOL?

iOS ScrollView 需要约束 y 位置或高度

UITableView ,重新加载时滚动到底部?

iPhone:如何确定线程是否是主线程?

iOS:开源 VoIP/SIP Objective-C 代码

如何实现全局 iPhone 异常处理?

使用 Objective-C 发布多部分/表单数据

使用 cocoaLumberjack 将日志(log)文件存储在哪里

如何在没有死锁的情况下同步调度主队列?

带有 UIImage 的 UIBarButtonItem 始终着色 iOS 7