UICollectoinView水平滚动与帧间项间距(UICollectoinView horizo

2019-07-19 03:11发布

我使用了我的一些图像的集合视图。

每个图像应该在屏幕的尺寸来显示,因此一个单元具有在屏幕的宽度。 该minimumInterItemSpacing的FlowLayout中的是25。所以,现在的问题是,如果我滚动,收集视图不滚动到下一个图像的开始,但对interItemSpacing的开始。

让我们来举个例子:

Image/Cell width = 320
CollectionView's interItemSpacing = 25

如果我滚动一页,滚动视图内容偏移是在320,而不是在345这意味着第二小区是不是在屏幕的中心。

如何解决这个问题? 有什么建议?

Answer 1:

好吧,我已经找到了,现在还有2个选项以获得适当的滚动。

1. UICollectionViewController size

增加集合视图的大小,它正好将你需要为interItemSpacing价值的物品。

下面是一些代码:

- (void) setupCollectionView;
{
    PSTCollectionViewFlowLayout *flowLayout = [[PSTCollectionViewFlowLayout alloc] init];
    CGSize itemSize = self.view.bounds.size;
    itemSize.width +=25;
    [flowLayout setItemSize:itemSize];
    [flowLayout setScrollDirection:PSTCollectionViewScrollDirectionHorizontal];
    flowLayout.minimumInteritemSpacing = 0.0f;
    flowLayout.minimumLineSpacing = 0.0f;

    self.collectionView = [[PSTCollectionView alloc] initWithFrame:self.view.bounds
                                          collectionViewLayout:flowLayout];
    [self.collectionView registerClass:[AMDetailImageCell class]
        forCellWithReuseIdentifier:AMDetailImageCellIdentifier];
    self.collectionView.delegate = self;
    self.collectionView.dataSource = self;
    self.collectionView.pagingEnabled = YES;
    CGRect rectSize = self.view.bounds;
    rectSize.size.width +=25;
    self.collectionView.frame = rectSize;
    [self.view addSubview:self.collectionView];

    [self scrollToStartIndex];

}

2. SectionEdgeInset

制作一个页面=一个部分,并使用sectionEdgeInset会导致相同的解决方案,但是 - 肯定的 - 并不总是一个选择!



Answer 2:

你应该考虑iterItemSpacing还提供了单元格的宽度。 尽量提供cellWidth = 320-25 = 295。 它应该工作,然后。



Answer 3:

我发现了一个解决的办法,这涉及继承的UICollectionViewFlowLayout。

我的CollectionViewCell大小是302 X 457和设置我的最小线间距为18(9pix针对每个小区)

当您从类扩展有需要将超过缠身的一些方法。 其中之一是

  • (CGSize)collectionViewContentSize

在这种方法中,我需要添加了什么是在UICollectionView总宽度。 这包括([数据源计数] * widthOfCollectionViewCell)+([数据源计数] * 18)

这里是我的自定义UICollectionViewFlowLayout方法....

-(id)init
{
    if((self = [super init])){

       self.itemSize = CGSizeMake(302, 457);
       self.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10);
       self.minimumInteritemSpacing = 0.0f;
       self.minimumLineSpacing = 18.0f;
       [self setScrollDirection:UICollectionViewScrollDirectionHorizontal];
   }
    return self;
}



-(CGSize)collectionViewContentSize{
   return CGSizeMake((numCellsCount * 302)+(numCellsCount * 18), 457);
}

这为我工作,所以我希望别人发现它有用!



文章来源: UICollectoinView horizontal scroll with inter item spacing