在UICollectionView的一行中显示三个组件

时间:2017-03-21 13:41:22

标签: ios objective-c iphone uicollectionview uicollectionviewlayout

我必须在UICollectionView的一行中显示三个组件我编写了以下代码来操作flowlayout

- (CGSize)collectionView:(UICollectionView *)collectionView
              layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *)collectionView.collectionViewLayout;

    CGSize size = flowLayout.itemSize;
    size.width = (Get_Bounds.width-40)/3;
    size.height = 135;   
    return size;

}

这适用于所有iOS设备,但在iPhone 6 Plus上效果不佳,只能在此设备上呈现两个组件。

2 个答案:

答案 0 :(得分:0)

你试试那段代码

    let height = img.size.height
    let width = img.size.width
    let cellHeight = collectionView.frame.size.width/3 * height / width
    return CGSize(width: collectionView.frame.size.width/3, height: cellHeight)

获取设备尺寸:

func iPhoneScreenSizes(){
let bounds = UIScreen.mainScreen().bounds
let height = bounds.size.height

switch height {
case 480.0:
    print("iPhone 3,4")
case 568.0:
    print("iPhone 5")
case 667.0:
    print("iPhone 6")
case 736.0:
    print("iPhone 6+")

default:
    print("not an iPhone")

}

}

您需要创建约束插座并将其管理为与设备相关的

答案 1 :(得分:0)

sizeForItemAtIndexPath 方法中,您需要的是给出 collectionViewCell项的大小。

因此,使用此算法,我们将集合视图单元格维度除以3并减去15(每个元素为5),相反,高度相反。

- (CGSize)collectionView:(UICollectionView *)collectionView
              layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{

        return CGSize(width: (self.view.frame.size.width/3)-15, height: (self.view.frame.size.width/3)+15)

  }