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

Ira*_*lii 15 iphone objective-c ios autolayout uicollectionviewcell

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

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

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

小智 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);
    
    Run Code Online (Sandbox Code Playgroud)

    如果您想动态地改变每行的单元格数量,我已在单独的答案中提供了这些细节.

  • 如果需要计算每个单元格的大小,可以在collectionView:layout:sizeForItemAtIndexPath:委托中执行.

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

  • 没有动画的重绘布局:

    [self.collectionView.collectionViewLayout invalidateLayout]

  • 动画布局更改:

    [self.collectionView performBatchUpdates:nil completion:nil]