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

时间:2014-02-26 04:55:37

标签: ios scroll uicollectionview

在我的项目中,我为UICollectionView创建了自定义布局。在该布局中,不可能进行垂直滚动,只能进行水平滚动。

如果UIViewController中唯一storyboard,布局工作正常,即没有垂直滚动,只能进行水平滚动。

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

但对于iOS 6,布局在使用和不使用UINavigationController时都能正常工作。(在iPhone中测试过)。

请帮忙。

谢谢,

我找到了解决方案。

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

我找到了来自https://stackoverflow.com/a/18989755/3117930

的解决方案

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

1 个答案:

答案 0 :(得分: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];
}

希望这会对你有帮助。