- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个 UICollectionViewController
管理一个 Collection View ,该 Collection View 针对不同的应用程序状态使用不同的布局。我正在使用 -setCollectionViewLayout:animated:
在不同布局之间进行转换。我遇到了错误的访问错误,如果知道 Collection View 的当前布局实际拥有(例如,保留对 strong
的引用),这将非常有帮助。
调用 -setCollectionViewLayout:animated:
后,我注意到以下内容(其中 self
是 UICollectionViewController
):
self.collectionView.collectionViewLayout
返回新布局。self.collectionViewLayout
仍然返回旧布局。这让我检查了 UICollectionView Class Reference ,这解释了这种行为:
collectionViewLayout
The layout object used to initialize the collection view controller. (read-only)
@property (nonatomic,readonly) UICollectionViewLayout *collectionViewLayout
Discussion
This property contains the layout object you passed to the initWithCollectionViewLayout: method. The layout object in this property is not updated to reflect changes to the collection view itself. You can use this property to refer to the layout object you originally configured the collection view to use.
好的。所以 self.collectionViewLayout
是对初始布局的弱引用(或者是?),而 self.collectionView.collectionViewLayout
是对当前布局的强引用。
为了确认这一点,我深入研究了调试器,但无法找到据称由 UICollectionViewController
拥有的实际 UICollectionView
>。相反, Collection View Controller 的 _view
变量是 UICollectionViewControllerWrapperView
的一个实例。 什么?
整个经历给我留下了以下问题:
UICollectionViewController
中的实际 UICollectionView
在哪里?self.collectionViewLayout
是否保留对初始布局的 strong
引用?最佳答案
好吧,我已经回答了我的第一个问题:UICollectionViewControllerWrapperView
有一个名为 _subviewCache
的 ivar,它是一个可变数组,包含实际的 UICollectionView
在索引 0 处。很奇怪。
但是,我仍然希望回答我的第二个问题。在我看来, Collection View Controller 没有保持对初始布局的强引用,因为它的 collectionViewLayout
(初始布局)属性是只读的,在调试器的变量 View 中检查 Collection View Controller 时,我找不到任何对 Collection View 布局的引用。然而,如果是这种情况,即使在 Collection View 对初始布局的强引用已被对不同布局的强引用替换之后,它如何保持初始布局?
更新:事实证明,我看到的访问错误崩溃实际上是由与 UIDynamicAnimator
的 布局的所有权。这几乎肯定是 Apple 代码中的错误,我已经提交了一个雷达,您可以在此处阅读(欢迎重复!):
http://www.openradar.me/15062440
也就是说,从技术上讲,这些都不能解决我的第二个问题。它不再与我或我的工作相关,但我仍然欢迎并赞成任何真正的答案,即使它们此时纯粹是学术性的。
关于ios - UICollectionViewController 的布局所有权(self.collectionView.collectionViewLayout 与 self.collectionViewLayout),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967928/
我有一个 UICollectionViewController 管理一个 Collection View ,该 Collection View 针对不同的应用程序状态使用不同的布局。我正在使用 -se
我目前正在开发一种功能,可以在 UICollectionView 的 2 个不同 CollectionViewLayouts 之间进行切换。切换工作得很好,布局使用相同的单元类别和不同的 Nib 。我
我想通过使用 UICollectionViewDelegateFlowLayout 为我的 collectionView 的每一行自定义很多布局大小,如下所示: func collectionView
我在 TableView 中有一个动态 collectionView,当我添加 invalidateLayout 时出现错误(图片如下)但是如果我删除 invalidateLayout 前四个单元格被
我在 oneView Controller 中有六个 UICollectionView,取决于用户选择的状态,我想重新加载集合数据。我的收藏 View 应该是水平滚动方向,动态大小单元格。有我的 se
根据UICollectionView和UICollectionViewLayout的类引用,UICollectionView持有对其collectionViewLayout属性的强引用,UIColle
是否可以在故事板中将 CollectionViewFlowLayout 更改为 CollectionViewLayout,因为我需要在示例中实现水流或 Pinterest 布局 RFQuiltLa
我尝试按照此解决方案 (How to determine height of UICollectionView with FlowLayout) 来确定我的 UICollectionViewLayou
所以很有趣,我正在尝试使用 collectionViewLayout sizeForItemAtIndexPath 在 collectionView 中一次只显示一个项目并水平滚动,我试过这个: -
我有一个 UICollectionViewLayout 子类,其中包含一个包含多行 UILabel 的补充 View 。问题是并非所有文本在某个点都是可见的,我怎样才能让补充 View 的高度等于它的
我已经实现了 UICollectionView 并且它可以使用下面的示例水平和垂直滚动粘性行和列: Example Github 应用程序可以在 Swift2 上找到,但升级后 Swift3 Cust
我在获取ListCollectionViewLayout(IGListKit 提供的库存布局)与Texture(以前称为AsyncDisplayKit)一起使用时遇到了麻烦。 这是我的 Collect
我在尝试将 View 更改为 Collection View 时遇到错误 error Argument Labels '(collectionviewlayout:)' do not match an
我开始尝试自定义 UICollectionView 布局。我的 UIViewController 中有一个 UICollectionView,它符合 UICollectionViewDataSourc
我有一个 UICollectionView ,我想动态应用两个不同的布局。 UICollectionViewFlowLayout:具有相同大小的单元格和圆形图像的布局。 var flowLayout:
我创建了一个自定义 collectionViewLayout,它根据设备屏幕大小按比例缩放单元格。包含在单元格中的所有图像似乎都被拉伸(stretch)了。我试过使用 aspectFit 和 aspe
在 collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayo
我想要做的是在选中此单元格时在 UICollectionViewCell 中显示一个 UICollectionView。我想用 rbcollectionviewinfofolderlayout展开我的
在 Swift 1.1 及之前的版本中,这是合法的: let layout = UICollectionViewLayout() class MyDynamicAnimator : UIDynamic
我是一名优秀的程序员,十分优秀!