如何在行的两侧创建空间uicollectionView

时间:2018-01-11 05:11:34

标签: ios objective-c uicollectionview

我在超级视图中添加了一个uicollectionView,并决定像这样的单元格大小:

- (nonnull __kindof UICollectionViewCell *)collectionView:(nonnull UICollectionView *)collectionView cellForItemAtIndexPath:(nonnull NSIndexPath *)indexPath {
    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    if(!cell){
        cell = [[UICollectionViewCell alloc]init];
    }
    UIImageView *imageView = [[UIImageView alloc]initWithFrame:cell.bounds];

    int r = arc4random_uniform(4);
    NSString *imageName = [[NSString stringWithFormat:@"%d", r] stringByAppendingString:@".jpg"];
    imageView.image = [UIImage imageNamed:imageName];
    [cell addSubview:imageView];
    cell.backgroundColor=[UIColor greenColor];
    return cell;
}



- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(180, 340);
}
- (NSInteger)collectionView:(nonnull UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 1500;
}

它在设备上看起来像这样:

enter image description here

我希望两个图像之间的空间与每行的填充和拖尾相等。

我还想在每一行之间设置空格。

我该怎么做?

4 个答案:

答案 0 :(得分:2)

在故事板中,选择UICollectionView,转到属性并更改插入。

enter image description here

  

编辑   通过代码

来做

添加UICollectionViewDelegateFlowLayout

class SecondVC: UIViewController , UICollectionViewDataSource, UICollectionViewDelegate , UICollectionViewDelegateFlowLayout

在func下面实现这个

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets{
        return UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
    }

输出

enter image description here

在Obj-c

使用此功能

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView 
                        layout:(UICollectionViewLayout *)collectionViewLayout 
        insetForSectionAtIndex:(NSInteger)section;

并返回UIEdgeInsetsMake(10, 10, 10, 10);

答案 1 :(得分:2)

  

func UIEdgeInsetsMake(_ top:CGFloat,_ left:CGFloat,_ bottom:   CGFloat,_右:CGFloat) - > UIEdgeInsets

     

<强>描述

     

为按钮或视图创建边缘插入。

     

插图是一个边距   长方形。正值表示更接近中心的边距   矩形,而负值表示距离更远的边距   中心。

sectionInset 会为collectionview scetion的前导和尾随提供空间

    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsetsMake(0, 4.0, 0, 4.0)

    self.collectionView = UICollectionView(frame: coll_frame, collectionViewLayout: layout)
    self.collectionView.delegate = self
    self.collectionView.dataSource = self
    self.collectionView.register(PreferenceCollectionViewCell.self, forCellWithReuseIdentifier: String(describing: PreferenceCollectionViewCell.self))
    self.addSubview(self.collectionView)

这两种方法会为每个单元格提供空间,首先你可以传递0.0并尝试它是如何工作的。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 6
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return 6
}

答案 2 :(得分:0)

试试这个

传递CGSizeMake你想要的东西

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

return CGSizeMake((self.view.frame.size.width/5) , (self.view.frame.size.width/5) - 25);
}

答案 3 :(得分:-1)

为细胞提供细胞间距和细胞间距。它根据提供的值调整单元格。

希望这有帮助。