具有固定行数和列数的集合视图

我有一个集合视图,并希望在多个设备上保持一致的行数和列数。 在iPhone 6s Plus上,会显示6个项目,但在iPhone 5s上查看应用程序时,仅显示四个项目。

在这里查看我的布局: iPhone 6s Plus上的布局

如何使集合视图在各种设备上显示相同的项目?

对于Swift 3.0。

确保使用UICollectionView并实现UICollectionView sizeForItemAtIndexPath

  func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { return CGSize(width: collectionView.bounds.size.width/3 - yourCellInterItemSpacing, height: collectionView.bounds.size.height/3 - yourCellInterItemSpacing) } 

这将允许根据屏幕大小创建单元格(假设您使用的是autoLayout),您应该除以所需的列数/行数。 将宽度除以所需的列数和高度除以行数。

要提供屏幕截图中显示的前导和尾随空格,只需在故事板中将适当的空格添加到UICollectionView 。 即前导空格和尾随空格等同于yourCellInterItemSpacing

确保您的类符合UICollectionViewDelegateFlowLayout协议!

您需要根据collectionView中的screenize计算项目大小。 最小间距应该是固定的。

 func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { if UIScreen.mainScreen().applicationFrame.width > 375 { //iPhone 6plus //Calculate cell size } else if UIScreen.mainScreen().applicationFrame.width <= 375 && UIScreen.mainScreen().applicationFrame.width > 320 { //iPhone 6 //Calculate cell size } else { //Calculate cell size } return CGSizeMake(width, height) } 

也符合UICollectionViewDelegateFlowLayout类的

 class XYZ : UICollectionViewController, UICollectionViewDelegateFlowLayout 

使您的类符合UICollectionViewDatasourceUICollectionViewDelegate并添加这些函数以生成5列10行:

 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 5 } func numberOfSections(in collectionView: UICollectionView) -> Int { return 10 }