UICollectionView单元垂直排列而不是网格排列

时间:2018-08-05 13:47:35

标签: swift uicollectionview uicollectionviewflowlayout

我正在尝试以编程方式创建UICollectionView,并且我的单元格正在垂直堆叠,而不是网格形式。 enter image description here

我的代码是:

    let layout:UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    let screenSize: CGRect = UIScreen.main.bounds
    let screenWidth = screenSize.width

    let width = (screenWidth - 4)/3
    layout.itemSize = CGSize(width: width, height: width+20)
    layout.sectionInset = UIEdgeInsets(top:0,left:0,bottom:0,right:0)
    collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
    collectionView?.dataSource = self
    collectionView?.delegate=self
    collectionView?.collectionViewLayout = layout
    collectionView?.register(NearbyCollectionViewCell.self, forCellWithReuseIdentifier: "cellId")

    self.view.addSubview(collectionView!)

2 个答案:

答案 0 :(得分:2)

在计算项目大小时,应始终考虑collectionView的框架。

在您的问题中,您使用的是UIScreen的宽度,这可能由于collectionView的{​​{1}}属性而导致计算错误。

  

让screenSize:CGRect = UIScreen.main.bounds

     

let screenWidth = screenSize.width

要进行正确的尺寸计算,请定义单行中的项目数。

inset(您可以根据需要使用它)

现在实现let maximumItemInRow = 3的{​​{1}}方法。

UICollectionViewDelegateFlowLayout

答案 1 :(得分:0)

您可以如下使用UICollectionViewDelegateFlowLayout:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
{
    let itemWidth: CGFloat = (screenWidth - 4)/3
    let itemHeight: CGFloat = itemWidth + 20

    return CGSize(width: itemWidth, height: itemHeight)
}