具有可变项目大小和多个部分的 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;
希望对您有所帮助! :)
首先: - 您必须为部分创建 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;
希望对您有所帮助! :)