将单个UICollectionViewCell对齐到collectionView的左侧

18

我有一个collectionView,它在tableView的单元格中。collectionView有多个部分。如果一个部分只有一个单元格,那么该单元格会居中显示。如何将该单元格对齐到左边?

collectionView inside tableView cell

collectionView使用以下flowLayout

let flowLayout = UICollectionViewFlowLayout()
flowLayout.scrollDirection = .vertical
flowLayout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
flowLayout.minimumInteritemSpacing = 0
flowLayout.minimumLineSpacing = 0
flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
collectionView.setCollectionViewLayout(flowLayout, animated: true)

1
你看过这个吗:https://dev59.com/C2Eh5IYBdhLWcg3wVCLK - rs7
那个链接中的所有答案都将所有collectionViewCells向左移动,即所有部分的所有单元格。我只希望对于只有一个单元格的那个部分才有这种行为。 - WalterBeiter
1
当您在一个部分中只有一个单元格时,可以添加一个幽灵单元格并隐藏它,然后第一个单元格将左对齐。 - Mohan Meruva
2个回答

21

由于 sectionInsetfunc collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { } 协议相同,因此可以调用该协议来了解哪个部分仅剩下一个单元格。

你可以替换为:

flowLayout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)

使用:

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

    if collectionView.numberOfItems(inSection: section) == 1 {

         let flowLayout = collectionViewLayout as! UICollectionViewFlowLayout

        return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: collectionView.frame.width - flowLayout.itemSize.width)

    }

    return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)

}

这个红色的细胞是第二部分中唯一剩下的,它是左对齐的:

输入图像描述


不要忘记在这个方法中使用UICollectionViewDelegateFlowLayout - Saurav_Sharma

9

我遇到了同样的问题。 我的解决方案是更改集合视图(collectionView)的预估大小。

自动 -> 无

在此输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接