我在故事板中有单元格的UICollectionView。每个单元格的大小设置为145x145。
它们在iPhone 4 - 5上显得很好,但尺寸并没有在iPhone 6和6+上按比例增加。而不是为每个设备手动设置不同的单元大小,我该如何动态地进行?
请参阅此处的示例:iPhone 5S:http://prntscr.com/55vy7q,iPhone 6:http://prntscr.com/55vyy2
答案 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]