所以我正在创建一个UISegmentedControl
,我正在为一个集合视图添加一个补充视图。然后我通过它的IBAction
上的委托使用该分段控件在我的UICollectionViewController
上设置BOOL类型属性,该属性适当地将从一个流发送到另一个流的数据更改为另一个。这一切似乎都有效,因为当我在加载集合视图(在选择第一个选项卡时加载,第一个选项卡的正确数据加载)后点击第二个选项卡时,右侧数据显示,但我的补充视图消失!
这有多奇怪:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
这个方法被正确调用,我正在设置我的补充视图的大小,我可以在我的模拟器中看到,因为我的数据被我的补充视图的大小所抵消。但是,没有被调用的是这种方法:
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
此方法仅在加载我的集合视图时调用,因此加载初始分段控制器,但永远不会再次调用,即使我在collectionView上调用reloadData
并且再次调用上面提到的size方法。
现在添加另一个转折点,我经历了一个断点,在其中一个方法中重新加载了集合视图,并且做了:
po [self.view recursiveDescription]
在调试器中,要查明我的分段控制器视图是否仍然存在,它是!它将隐藏标志设置为YES,但是......
baseClass = UICollectionReusableView; frame = (0 0; 320 55); hidden = YES; layer = <CALayer: 0xef4bd30>
当我对该方法的唯一引用是在名为的方法中时,如何使该视图不被隐藏:
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
这个方法第二次被调用了吗?
答案 0 :(得分:2)
所以答案与FlowLayouts有关,而且我没有正确设置我的。我确实得到了我的补充标题的大小,但我没有在方法中给它属性:
- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
仅在将补充视图添加到属性数组中时调用:
- (NSArray *) layoutAttributesForElementsInRect:(CGRect)rect
一旦我为类型UICollectionElementKindSectionHeader的补充视图添加了一个属性,并且正在调用布局方法,那么我的部分麻烦就会减少。
另一个问题是我正在检查粘性单元的索引路径,我试图将其粘贴到我的集合视图的顶部,并且此索引路径检查与我的补充视图索引路径相撞并且给我带来了麻烦。
总结一下: 确保您使用的是UICollectionViewFlowLayout方法!并确保您没有碰撞索引路径,从属性数组中删除您的属性。