UICollectionView显示在第一页上的第二页内容

时间:2016-02-05 12:13:44

标签: ios xcode uicollectionview uicollectionviewcell uicollectionviewlayout

enter image description here

出于某种原因,当我在UICollectionView的第一页时, 它显示了第二页的图像。

我还注意到页面没有居中......

我手动设置

 pageControl.numberOfPages = 3

所以我有三页图像。 每个页面显示8个项目(理想情况下......)。

这是在ViewDidLoad中:

 UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];  
 [layout setSectionInset:UIEdgeInsetsMake(10, 10, 15, 10)];
 [layout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
 [self.collectionView setCollectionViewLayout:layout];
 self.collectionView = [[UICollectionView alloc] initWithFrame:keyboardRect collectionViewLayout:layout];
 self.collectionView.dataSource = self;
 self.collectionView.delegate = self;
 self.collectionView.pagingEnabled = true;
 self.collectionView.alwaysBounceHorizontal = true;
 self.collectionView.contentSize = CGSizeMake(keyboardRect.size.width , keyboardRect.size.height);
 self.collectionView.showsHorizontalScrollIndicator = false;
 UINib *cellNib = [UINib nibWithNibName:@"TopCell" bundle:nil];
 [self.collectionView registerNib:cellNib forCellWithReuseIdentifier:@"cellIdentifier"];
 [self.collectionView registerClass:[TopCollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
 [self.collectionView setBackgroundColor:[UIColor redColor]];
 [self.view addSubview:self.collectionView];

当我尝试从

增加左右插图时
 [layout setSectionInset:UIEdgeInsetsMake(10, 10, 15, 10)];

这让事情变得更糟。它只在第一页看起来没问题, 但是第二页和第三页将会关闭。

以下是我的一些代码:

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
  return [self.Images count];
}


-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
  return CGSizeMake(70, 70);
}

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView* )collectionView {
  return 3;
}

提前谢谢!

2 个答案:

答案 0 :(得分:0)

如果您想在每个页面中只显示一个部分图像,则必须修改

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath方法。

您必须返回更通用的尺寸。

CGSize returnSize = CGSizeMake(screenWidth / 2 - insets, screenWidth / 2 - insets)

此处inset表示每个项目的interItemSpacing。 screenWidth是collectionView的宽度。

答案 1 :(得分:0)

如果要使用collectionView的水平样式,则需要自定义布局。 这是您可以使用的一些示例代码,我已经在github上上传了自定义布局代码。

FCEmoticonViewLayout *layout = [[FCEmoticonViewLayout alloc]init];
layout.itemSize = CGSizeMake(itemWidht, itemWidht);
layout.itemSpacing = 15;
layout.lineSpacing = 15;
layout.numberOfColumn = 5;
layout.numberOfRow = 2;
self.collectionView.collectionViewLayout = layout;

https://gist.github.com/Heisenbean/a0de38c1379a9d6a83f09ba6cafcb03c