gpt4 book ai didi

ios - 在自定义 UICollectionViewLayout 中使用自动布局调整补充 View 的大小

转载 作者:行者123 更新时间:2023-12-01 16:39:31 25 4
gpt4 key购买 nike

我正在寻找使用自动布局计算自定义 UICollectionViewLayout 中补充 View 大小的最佳方法.为了清楚起见,这是对我想要实现的目标的简化解释。

我有一个标题补充 View ACVHeaderView具有自动布局约束。

prepareLayout:我想计算节标题的大小并为其创建补充 View 布局属性。然后我想遍历该部分中的单元格,为单元格创建和存储布局属性。在“构建”布局后,这些属性将全部存储以由其他 Collection View 布局方法返回。

理想情况下,我想通过调用 collectionView:dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath: 来调整标题的大小,执行自动布局传递,然后使用 view:systemLayoutSizeFittingSize: .这正是我为单元本身所做的(遵循我从 WWDC 获得的一些示例代码)。

但是,此错误失败:

2014-09-04 18:51:53.852 ACV[7298:167827] *** Assertion failure in -[UICollectionViewData layoutAttributesForSupplementaryElementOfKind:atIndexPath:], /SourceCache/UIKit_Sim/UIKit-3302.3.1/UICollectionViewData.m:853
2014-09-04 18:51:53.916 ACV[7298:167827] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'request for layout attributes for supplementary view UICollectionElementKindSectionHeader in section 0 when there are only 0 sections in the collection view'

我理解我认为的问题......在我调整该部分中的任何单元格之前,我正在尝试使标题的补充 View 出队。这意味着我还没有为该部分中的任何单元格创建任何布局属性(使用 UICollectionViewLayoutAttributes.forCellWithIndexPath: )。 UICollectionViewData看起来像一个跟踪 UICollectionView 中的布局属性的内部类。并且它不允许我在至少一个单元格的布局属性之前使补充 View 出队。

我想到了以下几点:
  • 我可以先布局单元格,然后再布局标题。然而,这使得设置单元格框架的逻辑更加复杂,因为它们取决于标题的高度。
  • 我可以为单元格创建一个“虚拟”属性,创建标题并调整其大小,然后在布局第一个真实单元格时更新虚拟属性。这并不难,但也不是很干净!
  • 我可以手动创建 ACVHeaderView 的实例用于调整标题的大小。那会奏效,但在我的真实案例中,我有多个补充观点。必须保留我自己的补充类型记录并重用标识符和原型(prototype) View 字典似乎很不整洁。我将复制 Collection View 出队机制中使用的逻辑。

  • 实现这一目标的最佳方法是什么?我想我一定遗漏了一些更直接的东西,因为 Apple 鼓励开发人员正确使用动态类型和自动布局。

    最佳答案

    部分中可能有一个包含 0 个单元格的部分,因此不会导致此问题。我认为问题在于您添加了标题的补充属性,但该部分不可用(numberOfSectionsInCollectionView 返回 0)。

    我会确保
    numberOfSectionsInCollectionView:
    当您添加补充标题属性时,不返回 0。

    关于ios - 在自定义 UICollectionViewLayout 中使用自动布局调整补充 View 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25672543/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com