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

标签 ios uinavigationcontroller uicollectionview uicollectionviewcell uicollectionviewlayout

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

如果在已有 View Controller 的情况下推送此 View Controller ,它会正常显示。但是,当此 View Controller 用作应用程序导航 Controller 的初始 Root View Controller 时, Collection View 具有正确的大小和对齐方式,但单元格从屏幕顶部向下移动了大约 10 个像素,因此 Collection View 查看背景显示。

image of bug (注意红色是collection view的背景色)

如果我在 viewDidLoad、viewDidLayoutSubviews 或 viewWillAppear 中设置 Collection View ,我会遇到同样的问题。如果我在 viewDidAppear 中设置 Collection View ,我不会遇到这个问题,但这不起作用,因为用户将在 Collection View 加载之前看到黑屏。

这是显示 View Controller 的代码,在 application: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];

下面是设置 Collection View 和布局的代码:

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];

最佳答案

我通过在初始化函数中将 View Controller 的 automaticallyAdjustsScrollViewInsets 设置为 NO 来解决这个问题。感谢https://stackoverflow.com/a/25352483/1370967寻求灵感。

关于ios - 全屏水平滚动 UICollectionView 单元格在第一个显示的 UIViewController 中使用时向下移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930482/

相关文章:

objective-c - Objective-C : Retrieving contents of a folder from a server

ios - 我们可以使用GCM通知作为APNS角标(Badge)图标在iPhone应用程序上显示角标(Badge)编号吗

ios - 检查互联网连接类型 (iOS)

iphone - 导航堆栈中的某些 UIViewController 中未显示选项卡栏

ios - TableViewController 和 NavigationBar

iphone - UICollectionView 的奇怪动画行为(插入和删除项目)

swift - 如何增加滚动上 UICollectionView 的大小

ios - 如何在 iOS 中创建 365 天的本地通知

ios - UINavigationController 的 View 和 20 点偏移

ios - CollectionView 与单元格重叠