Размяшчэнне палёў вакол кожнага краю UICollectionView

Калі UICollectionView запаўняецца пунктаў, якія яны заўсёды ідуць прама да бакоў UICollectionView як так:

---------------
|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|
---------------

Я хацеў бы размясціць запас вакол кожнага краю, як так:

---------------
| 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 |
---------------

Я спрабаваў дамагчыся гэтага шляхам размяшчэння UICollectionView ўнутры свайго хостынгу UIView, усталяваўшы рамку для імітацыі мяжы, але яна пракручваецца ўнутры рамы так атрымлівае абразаецца зверху і знізу, а скролерам таксама з'яўляецца ў межах кадра.

Я паглядзеў на API, але я нічога не бачу відавочнага для дасягнення гэтай мэты. Любыя ідэі?

19

7 адказы

Я ведаю, што гэта стары пытанне, але не забывайце, што UICollectionView спадчыну ад 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)

Майце на ўвазе, што абодва contentInset і sectionInset можа змяніць інтэрвал вочак з вашага пункту гледжання. Для атрымання больш падрабязнай інфармацыі аб тым, што ў раздзеле гэта пост.

39
дададзена
<�Код> collectionView.contentInset гэта тое, што мне было трэба. дзякуй
дададзена аўтар Ali, крыніца

Вы можаце выкарыстоўваць наступную функцыю.

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

Вам давядзецца гуляць з нумарам, каб высветліць, як прымусіць collectionviewCells ў адным радку.

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

<�Моцны> Для Swift 3

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    return UIEdgeInsetsMake(10, 4, 10, 4)
}
15
дададзена
Як зрабіць гэта ў хуткай @Vinayak Кіні
дададзена аўтар Kishore Kumar, крыніца
Гэта маё любімае рашэнні тут - гэта нашмат менш, чым Hacky даючы вашу клетку водступы. І contentInset не заўсёды працуе для мяне.
дададзена аўтар Brian Sachetta, крыніца

Вы можаце ў значнай ступені кантраляваць кожны аспект сеткі з пратаколам CollectionView ст. Вось прыклад:

- (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;
}

The one you would want to change in your case is the sectionInsets

10
дададзена

у

(UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtуdexPath:(NSуdexPath *)уdexPath {
}

you can give your cells some margу on the left side.

Or you can create custom cells, which have a margу.

or you can set the property .sectionуset of your CollectionviewFlowLayout, which should be the easiest way (if you use FlowLayout)

6
дададзена
<�Р> Swift 2.0 </р>
self.automaticallyAdjustsScrollViewInsets = false
self.collectionView.contentInset = UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0)
3
дададзена

На Xcode 8, калі вы карыстаецеся інтэрфейс будаўнік вы можаце ўсталяваць права Падзелу уставак на памеры інспектара:

enter image description here

enter image description here

1
дададзена

Swift 3 version (Vinayak Kini answer) :

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

    return UIEdgeInsetsMake(10, 10, 10, 10) //top, left, bottom, right
}
0
дададзена