具有可变项目大小和多个部分的 UICollectionView

UICollectionView with variant itemsize and multiple section

如何使用 UICollectionView 实现图像中显示的布局? 提前致谢。

首先: - 您必须为部分创建 UICollectionReusableView class: 例如:ReusableView.h

@interface ReusableView : UICollectionReusableView
@property (weak, nonatomic) IBOutlet UIImageView *headerImage; // example of header content
@end

ReusableView.m

@implementation ReusableView
- (void)awakeFromNib {

// Initialization code
}
@end

-在 ReusableView.xib 中,您必须删除默认视图并从 ObjectLibrary 添加 UICollectionReusableView,然后添加图像或标签或其他任何内容,并在 AttributeInspector 中的标识符上写入您的 IdentifierName(同样的事情你必须为 cell)

  • 对于单元格,您必须使用 UICollectionTableViewCell class 并按照 UICollectionReusableView 中的相同步骤操作。

第二个:

  • 在ViewController.h中你必须使用一些委托:UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout>

  • 在ViewController.m中你必须从委托中使用这个方法,但是首先在viewDidLoad方法中你必须实现这个:

    [yourCollectionView registerNib:[UINib nibWithNibName:@"ReusableView" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"CollectionReusable"]; //collection identifier is: @"CollectionReusable"
    
    [yourCollectionView registerNib: [UINib nibWithNibName:@"CollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"CollectionCell"];
    
  • 对于部分你必须从委托中实现这个方法:

    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section
    {
    return CGSizeZero;
    }
    
    - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section; // here you return number of sections 
    
    
    
    - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
    

    { headerView = 零;

    headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"CollectionReusable" forIndexPath:indexPath];

    [headerView.headerImage setImage:[UIImage imageNamed:[listOfSymbolsObjects objectAtIndex:indexPath.section]]];

    return headerView;
    

    }

-对于 cells 你必须从委托中实现这个方法:

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView;

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

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath;

希望对您有所帮助! :)