現在6つのアイテムを提供するUICollectionView
でセットアップされたUICollectionViewDataSource
があります。これらは、画面を満たすのに必要な数よりも少ないです。問題は、画面を一杯にするのに十分なアイテムがある場合にのみコレクションビューがスクロールすることです(10、20でテスト済み)。表示するアイテムの数が少なくなると、取得しようとしているこのバウンスアニメーションを実行することさえできなくなり、修正されました。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateCollectionViewData) name:UIDocumentStateChangedNotification object:nil];
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
flowLayout.itemSize = CGSizeMake(160, 100);
flowLayout.minimumInteritemSpacing = 0;
flowLayout.minimumLineSpacing = 0;
self.collectionView = [[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:flowLayout];
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"];
self.collectionView.delegate = self;
self.collectionView.dataSource = self;
self.collectionView.bounces = YES;
[self.view addSubview:self.collectionView];
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return [self.collectionViewData count];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
Expense *expense = [self.collectionViewData objectAtIndex:indexPath.row];
UILabel *label = [[UILabel alloc]initWithFrame:cell.bounds];
label.text = expense.value;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont fontWithName:@"Miso-Bold" size:30];
label.textAlignment = NSTextAlignmentCenter;
[cell addSubview:label];
cell.backgroundColor = [UIColor colorWithRed:1 - (indexPath.row / 30.0f) green:0 blue:1 alpha:1];
return cell;
}
ご協力いただきありがとうございます!
bounces
は、名前にもかかわらず、設定する適切なプロパティではありません。 alwaysBounceVertical
および/またはalwaysBounceHorizontal
を設定する必要もあります。ドキュメントから:
このプロパティがYESに設定され、バウンスがYESの場合、垂直ドラッグが許可されますコンテンツがスクロールビューの境界より小さい場合でも。デフォルト値はNOです。
IBのわかりにくい名前に注意してください。 https://stackoverflow.com/a/18391029/294884
コレクションビューの属性インスペクターのストーリーボードでは、「バウンス」および「垂直方向にバウンス」をチェックする必要があります。
UICollectionView
の高さをUIView
のサイズに設定すると、スクロールの問題が無効になります。 UICollectionView
の高さが568ピクセルの場合、568ピクセル以上のコンテンツが含まれている場合にのみスクロールする必要があります。含まれるビューの高さに設定する必要があります(幅と同じ)。
お役に立てば幸いです。