how to set dynamic height of a Collection View, the 'view' not the 'cells'?
Solution 1
Set the width you want the collection view to have (hopefully that is static), and request a layout:
collectionView.frame = CGRectMake(0., 0., width, 0.);
[collectionView layoutIfNeeded];
The calculated height of the collectionView will then be available at:
collectionView.contentSize.height
Solution 2
For Swift please follow below steps:
Declare a CGFloat
variable in declaration section:
var height : CGFloat!
At viewDidAppear
you can get it by:
height = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
Maybe when you reload
data then need to calculate a new height with new data then you can get it by: addObserver
to listen when your CollectionView
finished reload data at viewWillAppear
:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
....
....
self.shapeCollectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.Old, context: nil)
}
Then add bellow function to get new height or do anything after collectionview
finished reload:
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
let newHeight : CGFloat = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
var frame : CGRect! = self.myCollectionView.frame
frame.size.height = newHeight
self.myCollectionView.frame = frame
}
And don't forget to remove observer:
self.myCollectionView.removeObserver(self, forKeyPath: "contentSize")
I hope this will help you to solve your issue in swift.
Solution 3
1) you need to set height constraint to collectionview in storyboard or xibs
2) make outlet of heightConstraint
3) and use this code while relaod collectionview
collectionViewHeightConstaint.constant = collectionView.contentSize.height
Solution 4
Based on the fact you know the height of the cells and you know the number of cells on the screen. I would...
self.collectionView.frame = CGRectMake(0, 0, DEFINED_WIDTH, DEFINED_CELL_HEIGHT*Number of Cells);
or have I miss understood the question?
Solution 5
In your ViewController, set the frame of the collectionView. For example:
self.collectionView.frame = CGRectMake(0, 0, 100, 200);
user3402639
Updated on June 12, 2022Comments
-
user3402639 almost 2 years
I have embedded a collection view in another view and disabled the collection view's scrolling ability, what i want to achieve is similar to Instagram's profile tab. However, I cannot figure out how should I set the height of the collection view in this case since the number of cells are dynamic.
I tried searching different solutions but most results are on changing the cells dynamically but not the collection view height itself. Is there any default/standard solutions for that?
-
user3402639 about 10 yearsthe height of the collection view is dynamic, depending the number of posts the user created, just like instagram, so i can't make it to constant....
-
John about 10 yearsUsually there is a dynamic number of cells. But if you really want a dynamic height of collectionView, you can set its frame whenever your datasource's array.count changes.
-
Ravi Ojha over 8 yearsi want to set the dynamic height of collection view, depend on the number of cells ,please tell me
-
Er. Vihar about 7 years@RaviJSS: Please check my answer below if you are working with swift. If you are working in objective-c then go through stackoverflow.com/a/28378625/6325474. This answer will help you a lot.