ios UICollectionView separation on top / bottom be

2020-05-26 08:52发布

问题:

I have a collection view, is working fine, and I have adjusted the separation for the X padding,

and it works fine, but for the Y padding between cells, doesn't seem to adjust to NO separation

This is my code for the layout

UICollectionViewFlowLayout *layoutItem=[[UICollectionViewFlowLayout alloc] init];
    layoutItem.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);

So how can I set the separation on top / bottom to 0px? Between cells?,

thanks!

回答1:

you will see only top y padding at first time. And For showing bottom y padding you need more data that CollectionView frame height. When you scroll up collection view you will see bottom y padding.

I used collectionView like this

https://stackoverflow.com/a/17856406/1305001

When I set

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
    return UIEdgeInsetsMake(60, 10, 50, 10);
}

The output will come as First time..

When you scrolled up collectionView you will see bottom padding..

Use this for verticle line spacing between cells

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
    return 5;
}

Will look like



回答2:

You can also do it a much simpler way using the collection view flow layout.

Set up the flow layout (remember to add the delegate in your header):

UICollectionViewFlowLayout * stickerFlowLayout = [[UICollectionViewFlowLayout alloc] init];

stickerFlowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
**stickerFlowLayout.minimumLineSpacing = 10;**
stickerFlowLayout.minimumInteritemSpacing = 5;
stickerFlowLayout.sectionInset = UIEdgeInsetsMake(10, 25, 20, 25);

// Set up the collection view 
collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:stickerFlowLayout];
collectionView.delegate = self;
collectionView.dataSource = self;

etc

As you can see we can easily set the line spacing using:

**stickerFlowLayout.minimumLineSpacing = 10;**

We can also alter the other attributes

stickerFlowLayout.minimumInteritemSpacing = 5;

With the interitem spacing affecting the spaces between items (similar but different to the line spacing)

Using the flow layout you can save on a huge amount of code and set your collection view up programatically all in one place (just setting the inset and line spacing has immediately saved me two extra unneeded functions)