Vraag Een marge plaatsen rond elke rand van de UICollectionView


Wanneer de UICollectionView wordt gevuld met items, gaan ze altijd gelijk naar de randen van de UICollectionView, zoals:

---------------
|X X X X X X X|
|X X X X X X X|
|X X X X X X X|
|X X X X X X X|
|X X X X X X X|
|X X X X X X X|
---------------

Ik zou graag een marge rond elke rand plaatsen zoals:

---------------
| X X X X X X |
| X X X X X X |
| X X X X X X |
| X X X X X X |
| X X X X X X |
| X X X X X X |
---------------

Ik probeerde dit te bereiken door de UICollectionView in zijn hosting UIView te plaatsen door het kader ervan in te stellen om een ​​rand te simuleren, maar het scrollt binnen het frame zodat het aan de boven- en onderkant wordt afgesneden en de schuifbalk ook in de randen van het frame verschijnt.

Ik heb naar de API gekeken, maar ik zie niets voor de hand liggen om dit te bereiken. Om het even welke ideeën?


19
2018-06-05 08:18


oorsprong


antwoorden:


In

(UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
}

je kunt je cellen een marge geven aan de linkerkant.

Of u kunt aangepaste cellen maken die een marge hebben.

of u kunt de eigenschap instellen .sectionInset van uw CollectionviewFlowLayout, wat de gemakkelijkste manier zou moeten zijn (als je FlowLayout gebruikt)


6
2018-06-05 08:26



Ik weet dat dit een oude vraag is, maar vergeet niet dat UICollectionView erft van UIScrollView.

UICollectionView *collectionView = [[UICollectionView alloc] init];
collectionView.contentInset = UIEdgeInsetsMake(x.x, x.x, x.x, x.x);
// Swift 3 for good measure
let collectionView = UICollectionView()
collectionView.contentInset = UIEdgeInsets(top: x.x, left: x.x, bottom: x.x, right: x.x)

Houd er rekening mee dat zowel contentInset als sectionInset de spatiëring van cellen in uw weergave kunnen wijzigen. Zie voor meer informatie hierover deze post.


39
2018-04-02 21:11



U kunt de volgende functie gebruiken.

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

Je zult met het nummer moeten spelen om uit te vinden hoe je de collectieviewCells in één regel forceert.

UIEdgeInsetsMake ( CGFloat top,CGFloat left,CGFloat bottom,CGFloat right); 

Voor Swift 3

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    return UIEdgeInsetsMake(10, 4, 10, 4)
}

15
2018-06-05 08:31



U kunt vrijwel elk aspect van het raster besturen met het protocol van collectionview. Hier is een voorbeeld:

- (UICollectionViewFlowLayout *)collectionViewFlowLayout
{
    UICollectionViewFlowLayout *flowLayout = [UICollectionViewFlowLayout new];
    flowLayout.itemSize = CGSizeMake(180, 255);
    flowLayout.sectionInset = UIEdgeInsetsMake(10, 30, 0, 30);
    flowLayout.minimumInteritemSpacing = 0.0f;
    flowLayout.minimumLineSpacing = 0.0f;
    flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
    return flowLayout;
}

Degene die je zou willen veranderen in jouw geval is de sectionInsets


10
2018-06-05 08:22



Snel 2.0

self.automaticallyAdjustsScrollViewInsets = false
self.collectionView.contentInset = UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0)

3
2018-04-28 21:20



Op Xcode 8, als u de interfacebuilder gebruikt, kunt u de Doorsnede-insets rechts van Size Inspector instellen:

enter image description here

enter image description here


1
2018-03-10 13:00



Swift 3-versie (Vinayak Kini antwoord) :

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {

    return UIEdgeInsetsMake(10, 10, 10, 10) //top, left, bottom, right
}

0
2018-06-14 11:50