Définir dynamiquement ContentSize de UICollectionView

J'ai un UICollectionView qui a été créé par programmation. Lors de la création de la collection de point de vue, je tiens à définir dynamiquement l'affichage de la collection de la hauteur sur la base du nombre de cellules qu'il doit tenir. Je ne veux pas activer le défilement de l'affichage de la collection elle-même, plutôt cette collection de point de vue est ajouté en tant que sous-vue d'un point de vue qui est contenue à l'intérieur d'une verticale UIScrollView.

Par exemple, si le UICollectionView a 10 UICollectionViewCells. Il peut avoir une hauteur de 200.0 f, mais si il y a 20 cellules, il peut avoir une hauteur de 300.0 f, et ainsi de suite.

J'ai tenté d'accomplir par la suite de l'Apple docs icien remplaçant le collectionViewContentSize méthode.

Bien que cette méthode ne retour valide CGSize lorsqu'elle est appelée, lorsque j'instancie l'affichage de la collection, son frame est toujours à zéro.

Voici ce que j'ai fait jusqu'à présent:

//subclass UICollectionViewFlowLayout
@interface LabelLayout : UICollectionViewFlowLayout
@property (nonatomic, assign) NSInteger cellCount;
@property (nonatomic) UIEdgeInsets sectionInset;
@property (nonatomic) CGSize itemSize;
@property (nonatomic) CGFloat minimumLineSpacing;
@property (nonatomic) CGFloat minimumInteritemSpacing;
@end
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
-(void)prepareLayout
{
[super prepareLayout];
_cellCount = [[self collectionView] numberOfItemsInSection:0];
}
- (void)setup
{
self.sectionInset = UIEdgeInsetsMake(10.0f, 0.0f, 10.0f, 0.0f);
self.itemSize = CGSizeMake(245.0f, 45.0f);
self.minimumLineSpacing = 10.0f;
self.minimumInteritemSpacing = 20.0f;
}
- (CGSize)collectionViewContentSize
{
CGFloat collectionViewWidth = 550;
CGFloat topMargin = 10;
CGFloat bottomMargin = 10;
CGFloat collectionViewHeight = (self.cellCount * (self.itemSize.height +    
self.minimumLineSpacing*2)) + topMargin + bottomMargin;
//THIS RETURNS A VALID, REASONABLE SIZE, but the collection view frame never gets set with it!
return CGSizeMake(collectionViewWidth, collectionViewHeight);
}
//create collectionView in viewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self makeLabels]; //determines the number of cells
LabelLayout *layout = [[LabelLayout alloc]init];
self.collectionView = [[UICollectionView alloc]initWithFrame:CGRectZero collectionViewLayout:layout];   
self.collectionView.backgroundColor = [UIColor redColor];
self.collectionView.dataSource = self;
self.collectionView.delegate = self;
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:cellIdentifier];
[self.collectionView reloadData];
[self.view addSubview:self.collectionView];
}

En outre, lorsque j'définir explicitement une image statique pour la UIcollectionViewil est créé comme prévu, donc je sais que mon seul problème est dans l'utilisation de la collectionViewContentSize méthode.

Donc ma question est, comment puis-je définir dynamiquement la hauteur de mes UICollectionView?

source d'informationauteur jac300