在集合视图中设置单元格的偏移量或初始位置

时间:2017-06-21 15:35:24

标签: ios swift uiscrollview uicollectionview uicollectionviewcell

我想在集合视图中的第一个单元格之前添加一些空格,类似于偏移量,我的集合视图具有水平滚动位置。

这是我当前的收藏视图:

current

它有一个35的主要约束,我想要的是从" x"开始的单元格。 35的位置,但能够像这样滚动全宽:

desired

有没有办法使用Swift 3在集合视图中创建初始偏移?

6 个答案:

答案 0 :(得分:4)

您只需为“收藏夹视图流”布局设置部分插入,而无需代码。

enter image description here

答案 1 :(得分:0)

您需要设置contentInset

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{ return UIEdgeInsetsMake(top, left, bottom, right); }

您可以详细查看here

答案 2 :(得分:0)

这里的派对有点晚了,但我遇到了几个解决方案

正确的方法(滚动到第一个单元格):

https://coderwall.com/p/e-ajeq/uicollectionview-set-initial-contentoffset

简单的hacky方式: 我在第一个项目中添加了一个透明的“spacer”单元格,以抵消剩余的单元格。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath)

    if (indexPath.row == 0) {
        cell.backgroundColor = UIColor.white
        return cell
    }

    cell.backgroundColor = UIColor.green
    return cell
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    if (indexPath.row == 0){
        //spacer
        return CGSize(width:6, height:50)
    }
    return CGSize(width: 50, height: 50)
}

答案 3 :(得分:0)

您可以在collectionView(_ collectionView:UICollectionView,cellForItemAt indexPath:IndexPath)中的初始单元格之前设置空间,如下所示:

if (indexPath.row == 0 || indexPath.row == 1)
{
  // Set value according to user requirements
  cell.frame.origin.y = 0
  cell.frame.origin.y = 10

}

答案 4 :(得分:0)

Swift 5 / Xcode 10.2

感谢亚历山大·斯皮里切夫

根据他的回答,您还可以通过编程将左插图设置为 35分

let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
layout.minimumLineSpacing = 8
layout.sectionInset = UIEdgeInsets(top: 0, left: 35, bottom: 0, right: 0)

collectionView.setCollectionViewLayout(layout, animated: false)

答案 5 :(得分:0)

如果仅希望该部分中的单元格具有填充,请按照其他答案中的建议使用sectionInset中的UICollectionViewFlowLayout。 但据我所知,您最好在集合视图本身上设置contentInsets(从UIScrollView继承)