UICollectionView中的方形单元格布局



我正在构建一个ios应用程序,我需要在横向模式下一行显示8个单元格。也必须有5行,共40个单元格将显示。它必须独立于设备,无论是iPad还是iPhone,必须提供相同的外观。

Jpark822的答案是正确的,但是您将与单元格的间距和偏移量作斗争。

你可以使用UICollectionViewFlowLayout子类:

我们叫它PrettyLayout !

@implementation PrettyFlowLayout
#define itemCountPerLine 8
#define itemCountPerColumn 5
-(void) prepareLayout
{
    CGFloat lineSpacing = ([self collectionViewContentSize].width - self.itemSize.width * itemCountPerLine) / (itemCountPerLine + 1);
    CGFloat interItemSpacing = ([self collectionViewContentSize].height - self.itemSize.height * itemCountPerColumn) / (itemCountPerColumn + 1);
    self.minimumLineSpacing = lineSpacing;
    self.minimumInteritemSpacing = interItemSpacing;
    self.sectionInset = UIEdgeInsetsMake(interItemSpacing, lineSpacing, interItemSpacing, lineSpacing);
}
- (CGSize)itemSize
{
    int size;
    size = (int) MIN(self.collectionView.frame.size.width / itemCountPerLine, self.collectionView.frame.size.height / itemCountPerColumn )
    return CGSizeMake((CGFloat)size, (CGFloat)size);
}
@end

然后你所需要做的就是声明一个PrettyLayout的实例作为你的collectionview的布局。

PS:没有尝试我的代码,希望它会工作

确保实现UICollectionViewDelegate and UICollectionViewDataSource

,然后分配委托和数据源:myCollectionView.delegate = self;myCollectionView.dataSource = self;

然后使用collectionView的数据源和委托方法在视图控制器中传递信息:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { }

- (NSInteger)collectionView:(UICollectionView *)collectionView

你可能想要有5个部分,每个部分8项,或者只是一个大的40项

如果你想指定你的集合视图单元格的大小,那么实现UICollectionViewDelegateFlowLayout然后你可以使用委托方法:

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

指定大小。这样你就可以设置你的视图,这样你就可以同时显示所有5行,每行8行

最新更新