iOS 7 中 UICollectionView 中不需要的垂直滚动

Posted

技术标签:

【中文标题】iOS 7 中 UICollectionView 中不需要的垂直滚动【英文标题】:Unwanted vertical scrolling in UICollectionView in iOS 7 【发布时间】:2014-02-26 04:55:36 【问题描述】:

在我的项目中,我为UICollectionView 创建了一个自定义布局。在该布局中,无法垂直滚动,只能水平滚动。

如果UIViewControllerstoryboard 中唯一的东西,则布局工作正常,即没有垂直滚动,只有水平滚动是可能的。

但如果您将UINavigationController 添加到storyboard,则 iOS 7 中的布局会失败(在模拟器和设备中测试)。然后启用垂直滚动。您可以滚动一点,可能是 20 或 30 点。

但是对于 ios 6,无论有没有UINavigationController,布局都可以完美运行。(在 iPhone 中测试)。

请帮忙。

谢谢,

解决方案

我找到了解决办法。

在 iOS 7 中,一些插图会自动添加到 UICollectionView。所以要修复它,将以下代码添加到 ViewController self.automaticallyAdjustsScrollViewInsets = NO;

我从https://***.com/a/18989755/3117930找到了解决方案

希望这对某人有帮助 谢谢,

【问题讨论】:

【参考方案1】:

据我所知,它会尝试将注意力集中在最接近过渡前视图布局中心的单元格上。但是,如果在视图转换前的中心没有碰巧有一个单元格,那么它仍然会尝试将单元格放在转换后的中心位置。如果您将 alwaysBounceVertical/Horizo​​ntal 设置为 YES,这一点非常清楚,使用单个单元格加载视图,然后执行布局转换。

在触发布局更新后,我可以通过明确告诉集合关注特定单元格(在本例中为第一个单元格可见单元格)来解决此问题。

[self.collectionView setCollectionViewLayout:[self generateNextLayout] animated:YES];

// scroll to the first visible cell
if ( 0 < self.collectionView.indexPathsForVisibleItems.count ) 

    NSIndexPath *firstVisibleIdx = [[self.collectionView indexPathsForVisibleItems] objectAtIndex:0];
    [self.collectionView scrollToItemAtIndexPath:firstVisibleIdx atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:YES];

希望这会对你有所帮助。

【讨论】:

感谢您的快速响应。我按照你说的试过了。它没有解决我的问题。 欢迎您。这里有一些链接,请检查它们是否可以解决您的问题***.com/questions/20234915/…techotopia.com/index.php/…techotopia.com/index.php/…

以上是关于iOS 7 中 UICollectionView 中不需要的垂直滚动的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7.1 在 UIPopover 中嵌套 UICollectionView

iOS 7 中 UICollectionView 中不需要的垂直滚动

使用 iOS 7 的 UICollectionView?边距空间

UIMenuController sharedMenuController - uicollectionview 的自定义菜单项不在 ios 7 中显示

在 iOS 7 上运行时 UICollectionView 不显示

在 UICollectionView iOS 7 中收到内存警告