UICollectionViewCell动态调整大小为4.4和5.5英寸

时间:2014-11-13 09:18:39

标签: ios objective-c iphone autolayout uicollectionviewcell

我在故事板中有单元格的UICollectionView。每个单元格的大小设置为145x145。

它们在iPhone 4 - 5上显得很好,但尺寸并没有在iPhone 6和6+上按比例增加。而不是为每个设备手动设置不同的单元大小,我该如何动态地进行?

请参阅此处的示例:iPhone 5S:http://prntscr.com/55vy7q,iPhone 6:http://prntscr.com/55vyy2

1 个答案:

答案 0 :(得分:21)

如果您希望单元格调整宽度,则需要根据视图宽度计算流程布局itemSize

  • 如果您的所有单元格大小相同,则可以设置流程布局的itemSize属性:

    #define kCellsPerRow 2
    
    UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout*)self.collectionView.collectionViewLayout;
    CGFloat availableWidthForCells = CGRectGetWidth(self.collectionView.frame) - flowLayout.sectionInset.left - flowLayout.sectionInset.right - flowLayout.minimumInteritemSpacing * (kCellsPerRow - 1);
    CGFloat cellWidth = availableWidthForCells / kCellsPerRow;
    flowLayout.itemSize = CGSizeMake(cellWidth, flowLayout.itemSize.height);
    

    如果您想动态改变每行的单元格数量,我提供了details in a separate answer

  • 如果您需要计算每个单元格的尺寸,您可以在collectionView:layout:sizeForItemAtIndexPath:代表中执行此操作。

在设备方向更改时重新计算itemSize并更新布局:

  • 重绘不带动画的布局:

    [self.collectionView.collectionViewLayout invalidateLayout]

  • 动画布局更改:

    [self.collectionView performBatchUpdates:nil completion:nil]