两个 UICollectionView 实例共享同一个 UICollectionViewFlowLayout 实例?

Posted

技术标签:

【中文标题】两个 UICollectionView 实例共享同一个 UICollectionViewFlowLayout 实例?【英文标题】:Two UICollectionView instances sharing the same UICollectionViewFlowLayout instance? 【发布时间】:2013-01-03 21:18:22 【问题描述】:

我不确定这是一个特性还是一个错误,但是当我在一个视图控制器上有两个使用 UICollectionViewFlowLayout 的相同实例的集合视图时,会发生一件有趣的事情。请注意,我没有为此使用 Interface Builder / XIB;我正在将所有内容都放在代码中。

第一个 UICollectionView 有 12 个单元格,但第二个有 20 个单元格。当我重新加载两个集合视图时,两个都表现得好像它们的 contentSize 属性中有 20 个单元格。这意味着当我滚动到第一个 UICollectionView 的右侧并通过第一个(也是唯一的)12 个单元格时,我的应用程序崩溃(因为我从一个只有 12 个单元格的数据的数组中提取数据) .

为了暂时解决这个问题,我实例化了两个相同的UICollectionViewFlowLayout 对象并将每个对象分配给它自己的集合视图。这是正常行为吗?

我才刚刚开始使用UICollectionViews 编写代码,所以如果我散发出任何东西,请原谅我的无知!

【问题讨论】:

【参考方案1】:

不要这样做。集合视图和布局对象应该是 1:1 的关系。布局对象有一个属性collectionView,显然它只能保存一个集合视图的引用。

当集合视图向布局询问其大小等时,布局对象将基于您分配布局的第二个集合视图,因为这将保存在collectionView 属性中。

我在文档中找不到明确声明不在集合视图之间共享布局对象,但上面讨论的属性应该清楚地表明这不是预期用途。

【讨论】:

你摇滚,先生。很好的说明!

以上是关于两个 UICollectionView 实例共享同一个 UICollectionViewFlowLayout 实例?的主要内容,如果未能解决你的问题,请参考以下文章

js的构造函数

共享同一行和列时将网格项目设置为不重叠

主机ubuntu,加上vmware里面的debian,想共享同一块swap分区

共享内存

如何让两个 Elastic Beanstalk 环境共享一个数据库实例

实例化后UICollectionVIew NIL