当在第一个显示的UIViewController中使用时,全屏水平滚动UICollectionView单元向下移动

时间:2015-04-28 21:43:51

标签: ios uinavigationcontroller uicollectionview uicollectionviewcell uicollectionviewlayout

我创建了一系列帮助页面,这些页面会在用户首次启动应用时显示。为此,我有一个以编程方式设置UIViewController,初始化(编程设置)UICollectionView视图控制器边界的大小。每个单元格都包含一个全屏大小的图像。

当已经存在现有视图控制器时按下此视图控制器时,它显示正常。但是,当此视图控制器用作app导航控制器的初始根视图控制器时,集合视图具有正确的大小和对齐方式,但单元格从屏幕顶部向下移动约10个像素,因此集合查看背景显示。

image of bug (注意红色是集合视图背景颜色)

如果我在viewDidLoad,viewDidLayoutSubviews或viewWillAppear中设置了集合视图,我会遇到同样的问题。如果我在viewDidAppear中设置了集合视图,我就不会遇到这个问题,但这不起作用,因为用户在集合视图加载之前会看到黑屏。

以下是在应用程序中显示视图控制器的代码:didFinishLaunchingWithOptions:launchOptions:

UIViewController* viewControllerToPush = [[OnboardingViewController alloc] initWithNibName:nil bundle:nil];
_nav = [[UINavigationController alloc] initWithRootViewController:viewControllerToPush];
[_nav setNavigationBarHidden:YES];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window setRootViewController:_nav];
[self.window makeKeyAndVisible];

以下是设置集合视图和布局的代码:

UICollectionViewFlowLayout* layout = [[UICollectionViewFlowLayout alloc] init];
layout.minimumInteritemSpacing = 0;
layout.minimumLineSpacing = 0;
layout.itemSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height);
layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;

CGRect collectionViewFrame = self.view.bounds;
_collectionView = [[UICollectionView alloc] initWithFrame:collectionViewFrame collectionViewLayout:layout];
_collectionView.delegate = self;
_collectionView.dataSource = self;
_collectionView.pagingEnabled = YES;
_collectionView.showsHorizontalScrollIndicator = NO;

[_collectionView registerClass:[OnboardingCollectionViewCell class] forCellWithReuseIdentifier:@"Cell"];
[self.view addSubview:_collectionView];

1 个答案:

答案 0 :(得分:7)

我通过在init函数中将视图控制器的automaticAdjustsScrollViewInsets设置为NO来修复此问题。感谢https://stackoverflow.com/a/25352483/1370967获得灵感。