水平滚动方向的iOS7 UICollectionView不起作用

Posted

技术标签:

【中文标题】水平滚动方向的iOS7 UICollectionView不起作用【英文标题】:iOS7 UICollectionView in scroll direction horizontal isn't working 【发布时间】:2013-09-23 14:46:50 【问题描述】:

ios6 的相同代码运行良好。

由于某些原因更新到 iOS7 并使用此布局时

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];

    [flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
 /
    CGSize s = CGSizeMake(self.collectionView.frame.size.height,self.collectionView.frame.size.height);

    [flowLayout setItemSize:s];

collectionview 委托方法没有被调用。我将滚动方向更改为垂直,调用所有委托,我将集合视图的帧大小更改为更大,并调用委托方法。我怀疑collectionview 是出于某种原因在其内容视图内偏移,导致单元格不在屏幕上,从而没有调用代表。当框架变大(在水平或垂直模式下)时,collectionview“填充”滚动视图并调用委托

正常大小的collectionview(不调用单元格和委托)

将框架放大 50 像素

CGRect r = CGRectInset(self.filmStripRect, 0, -50);

单元格出现并调用代表

【问题讨论】:

你在storyboard中也设置了滚动方向吗? 不使用故事板 啊。您将单元格 .itemSize 设置为与您的 collectionview 大小相同。也许就是这样?每个单元格将与您的整个 collectionview 大小相同。只需将 CGSize 设为 20,20 即可进行测试。 跟这个***.com/questions/13780138/…有关 【参考方案1】:

您还应该检查这些以使水平滚动正常工作:

【讨论】:

【参考方案2】:

我们应该创建一个新的CollectionViewLayout,并把它交给collectionView

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
self.collectionView.collectionViewLayout = flowLayout;

【讨论】:

以编程方式更改现有流布局的滚动方向不起作用。创建一个新的对我来说是正确的解决方案。谢谢【参考方案3】:
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[CollectionData setCollectionViewLayout:flowLayout];

如果您使用故事板,请选择一个集合视图,转到属性检查器并设置滚动方向水平。

【讨论】:

以上是关于水平滚动方向的iOS7 UICollectionView不起作用的主要内容,如果未能解决你的问题,请参考以下文章

将方向更改为“水平”不会更改 RadListView 的滚动方向?

Android水平RecyclerView滚动方向

水平和垂直两个方向滚动

当滚动方向为水平时,从左到右填充 UICollectionView

如何防止在水平滚动方向上从左到右滚动集合视图?

UICollectionView 中的垂直和水平滚动方向