因此,我正在创建UISegmentedControl,将其放入集合视图的补充视图中。然后,我通过其IBAction上的委托使用该分段控件,在我的UICollectionViewController上设置BOOL type属性,该属性适当地将从一个流发送到另一个流的数据更改。这一切似乎都奏效,因为当我在加载集合视图后点击第二个选项卡(加载时选择了第一个选项卡,并且第一个选项卡具有正确的数据),显示了正确的数据,但是我的辅助视图消失了!

奇怪的是:

 - (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

甚至第二次都没有调用此方法?

最佳答案

因此答案与FlowLayouts有关,而我的设置不正确。我确实确实获得了我的补充标题的大小,但是我没有在方法中赋予它属性:

- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath

仅当在以下情况下向属性数组添加补充视图时才调用该方法:
- (NSArray *) layoutAttributesForElementsInRect:(CGRect)rect

一旦我为UICollectionElementKindSectionHeader类型的补充视图添加了一个属性,并且调用了layout方法,那么我的部分麻烦就减轻了。

另一个问题是,我正在检查试图粘贴到集合视图顶部的粘性单元格的索引路径,而这种索引路径检查与我的补充视图索引路径发生冲突,给我带来麻烦。

总结一下:
确保您正在使用UICollectionViewFlowLayout方法!并确保没有冲突的索引路径从属性数组中删除属性。

关于ios - UICollectionView隐藏我的补充 View ,为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25070732/

10-16 22:03