具有自定义布局的UICollectionView - 无法在故事板中添加补充视图

Veg*_*gar 16 ios uicollectionview

从IOS的Collection View编程指南:


注册您的单元格和补充视图

您可以通过编程方式或在应用程序的故事板文件中配置集合视图的单元格和视图.

  • 要在故事板中配置单元格和视图:

    在故事板中配置单元格和补充视图时,可以通过将项目拖动到集合视图并在其中进行配置来实现.这将在集合视图与相应的单元格或视图之间创建关系.

    • 对于单元格,从对象库中拖动"集合视图单元"并将其放到集合视图中.将单元格的自定义类和集合可重用视图标识符设置为适当的值.
    • 对于补充视图,从对象库中拖动Collection Reusable View并将其放到集合视图中.将视图的自定义类和集合可重用视图标识符设置为适当的值.

只要布局设置为Custom而不是Flow,我就无法将Collection Reusable View放到我的storyboard中的集合视图中.如果我在布局设置为流时删除一个,那么一旦我将布局设置回自定义,它就会消失.

如果我将它放在集合视图之外,作为顶级对象,它不会在运行时使用,即使类和标识符都设置正确.相反,我得到一个错误告诉我,我必须注册补充视图.如果我手动注册,它需要使用故事板中的视觉设计.

关于这是如何工作的任何建议?

Nof*_*ood 10

只有当您的布局是UICollectionViewFlowLayout的子类时,才能执行此操作.

  1. 不要在storyboard中指定自定义布局.
  2. 选择流程布局并设计补充视图.
  3. 然后在viewcontroller中以编程方式创建新的布局对象并将其分配给collectionview.
  4. 在布局对象上调用InvalidateLayout
  5. 使用您在故事板中设计的补充视图和自定义布局

这对我有用.希望它也可以帮助其他人!

  • 如果您的自定义布局是UICollectionViewFlowLayout的子类,请打开Storyboard编辑器并在Collection View对象下的左对象列表中选择流布局(黄色多维数据集).然后在"Identity Inspector"中选择您的后代类.而已.无需更改代码. (4认同)

Ani*_*ese 5

您无法使用自定义布局向故事板添加补充视图.补充视图由布局对象管理.只有布局知道它的位置,数字..没有必要通过布局对象实现补充视图.这是布局对象的关注点.UICollectionViewFlowLayout提供补充视图(章节页眉/页脚).所以你可以在故事板中设计它.如果您使用自定义布局,故事板如何知道它是否支持补充视图.所以它会给你这份工作.您必须为补充视图注册类/ nib.

  • 我不同意这个推理.`registerClass:forSupplementaryViewOfKind:withReuseIdentifier:`方法属于`UICollectionView`,而不是`UICollectionViewLayout`.collectionview对布局支持与否的补充视图一无所知,而kind-spesifier只是一个字符串,因此您可以为布局无关的补充视图注册类.那你为什么不能在故事板上做同样的事呢?添加一个`UICollectionReusableView`并指定它的种类? (11认同)
  • 文件与断言相矛盾.我说这是故事板设计师中的一个明显的错误.是的,布局管理器控制元素的布局,但是我想要在视觉上设计这些元素的许多功能.文档表明您可以拖放集合可重用视图,但在自定义布局中您不能,并且在流布局中,您只能拖放两个页眉和页脚. (5认同)