How to resize the collection view cells according to device screen size?
Implement sizeForItemAt
method according to the view's frame size
Swift
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { let height = view.frame.size.height let width = view.frame.size.width // in case you you want the cell to be 40% of your controllers view return CGSize(width: width * 0.4, height: height * 0.4)}
Objective C
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { CGFloat height = self.view.frame.size.height; CGFloat width = self.view.frame.size.width; // in case you you want the cell to be 40% of your controllers view return CGSizeMake(width * 0.4, height * 0.4); }
Swift 4
Multiply the collectionView's frame width/height in an implementation of the sizeForItemAt
method.
class yourClassName: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { return CGSize(width: self.myCollectionView.frame.height / 6 * 5, height: self.myCollectionView.frame.height / 6 * 5) }}
self.myCollectionView
is the reference from you collection view Item
it's important to implement UICollectionViewDelegateFlowLayout
And because it will not fit another cell you will have only one row.
You should try using a simple equation when setting your cell size instead of number like so:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { return CGSize(width: view.frame.width / 2, height: 350) }
dividing it by 2 will mean that the cell always be half of the screens size, taking away and kind of minimumLineSpacing functions and/or and UIEdgeInset methods you have called. Hope this helps.