在集合视图中使用自定义流布局时添加标题
Posted
技术标签:
【中文标题】在集合视图中使用自定义流布局时添加标题【英文标题】:Add Header When Using a Custom Flow Layout in a Collection View 【发布时间】:2017-06-28 17:26:53 【问题描述】:向集合视图添加自定义流布局时,附件选项消失了,为什么?,我使用 this 流布局将我的集合视图的元素居中,但由于无法使用情节提要向我的集合视图添加部分标题,为集合视图添加标题的步骤是什么?
我尝试的是:
由于我的自定义布局是 UICollectionViewFlowLayout 的子类,因此在情节提要编辑器中,我选择了左侧对象列表中的布局(黄色立方体)。然后在 Identity Inspector 中,我选择了自定义布局的类。
collection view 似乎为 header 创建了空间,但里面没有显示任何内容,即使我只为可重用视图提供另一种背景颜色,它也不会显示任何内容。
【问题讨论】:
【参考方案1】:经过一番研究,我找到了我想要的东西:
我必须在单独的 xib 中创建我的标题,所以这就是我所做的:
-
使用 xib 文件创建了 UICollectionReusableView 子类
使用 xib 文件创建了 UICollectionViewCell 子类
添加了我的 ui 元素(我需要在标题处设置一个水平集合,因此在这种情况下也需要单独创建和设计单元格)。
在我的主集合视图的视图控制器中,需要注册可重用视图的 nib 和可重用单元格的 nib,如下所示:
Swift 3.2
override func viewDidLoad()
...
let headerNib = UINib(nibName: "HeaderCollectionReusableView", bundle: nil)
collection.register(headerNib, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "Header")
-
注册笔尖后,您可以使用此代码在
viewForSupplementaryElementOfKind
方法中添加标题
Swift 3.2
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
switch kind
case UICollectionElementKindSectionHeader:
let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "Header", for: indexPath)
return headerView
default://I only needed a header so if not header I return an empty view
return UICollectionReusableView()
【讨论】:
【参考方案2】:在 Objective-C 中
在viewDidLoad中调用registerCell方法
- (void)registerCell
UINib *cellNibTitle = [UINib nibWithNibName:@"YOUR_HEADER_CELL" bundle:nil];
[self.collection registerNib:cellNibTitle forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"Header"];
并调用委托方法:
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
if(kind == UICollectionElementKindSectionHeader)
YOUR_HEADER_CELL *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"Header" forIndexPath:indexPath];
return headerView;
return [UICollectionReusableView new];
【讨论】:
以上是关于在集合视图中使用自定义流布局时添加标题的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView:使用动画和自定义布局调整单元格大小
如何在 iOS 中避免/禁用 Collection View 的垂直滚动
在 ios 8 中将集合或表格视图或自定义视图添加到滚动视图