具有固定行数和列数的集合视图
我有一个集合视图,并希望在多个设备上保持一致的行数和列数。 在iPhone 6s Plus上,会显示6个项目,但在iPhone 5s上查看应用程序时,仅显示四个项目。
在这里查看我的布局:
如何使集合视图在各种设备上显示相同的项目?
对于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
使您的类符合UICollectionViewDatasource
和UICollectionViewDelegate
并添加这些函数以生成5列10行:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 5 } func numberOfSections(in collectionView: UICollectionView) -> Int { return 10 }