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 UIcollectionView
il 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
Vous devez vous connecter pour publier un commentaire.
Vue d'une collection est un défilement de l'affichage, de sorte que votre
-collectionViewContentSize
méthode est de déterminer la taille du contenu, pas de la taille de la vue d'ensemble. Vous aurez besoin de définir l'affichage de la collection dubounds
ouframe
de propriété pour définir la taille de l'affichage de la collection elle-même.Vous pouvez aussi définir c'est
scrollEnabled
propriétéNO
pendant que vous y êtes.Utiliser le
sizeForItemAtIndexPath:
méthode.Dans Swift:
En Objective-C: