4

我創建了一系列幫助頁面,當用戶第一次啓動應用程序時顯示。爲此,我以編程方式設置UIViewController,它初始化視圖控制器邊界的大小(以編程方式設置)UICollectionView。每個單元格包含一個全屏大小的圖像。全屏水平滾動UICollectionView單元格在第一個顯示的UIViewController中使用時向下移動

當已經有一個現有的視圖控制器時,這個視圖控制器被推動,它顯示正常。但是,當此視圖控制器用作應用程序導航控制器的初始根視圖控制器時,集合視圖具有正確的大小和對齊方式,但單元格從屏幕頂部向下移動約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]; 

回答

7

我通過在init函數中將視圖控制器的自動調整ScrollViewInsets設置爲NO解決了這個問題。感謝https://stackoverflow.com/a/25352483/1370967對此的啓發。

+1

當我將itemSize設置爲集合視圖的邊界大小時,這幫助我解決了運行時異常與UICollectionView。自動調整調整滾動視圖後,再也沒有出現異常。謝謝! – Denis

相關問題