我正在尝试以编程方式创建UICollectionView,并且我的单元格正在垂直堆叠,而不是网格形式。
我的代码是:
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!)
答案 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)
}