A.S
A.S

Reputation: 816

Set the size of UICollectionViewCell dynamically

I have a UICollectionViewCell which contains an image view and a label.

I am able to dynamically size the cell only when I have an image view.

I have added a label below the imageView with auto layout.

On viewDidLoad the image gets truncated or the text gets truncated. How can I dynamically size both the image view and label in the UICollectionViewCell.

Following is my code that works only with imageView

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize {
        let imageSize = model.images[indexPath.row].size
        return imageSize
    }

I have an array of text and images from where I am displaying the content.

Any help will be appreciated. Thank you.

Upvotes: 0

Views: 2197

Answers (3)

Amul4608
Amul4608

Reputation: 1448

Here collectioncell is outlet of Collection view

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize {

        let cellsize = CGSize(width: (collectioncell.bounds.size.width/2) - 12, height:(collectioncell.bounds.size.height/3) - 20)

        return cellsize
    }

Upvotes: 0

Sandeep Bhandari
Sandeep Bhandari

Reputation: 20379

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize {
        let imageSize = model.images[indexPath.row].size

        //find the height of label on setting text.
        //create a temp label
                let tempLabel = UILabel()
        tempLabel.numberOfLines = 0
        tempLabel.text = "abcd" //set ur cells text here
        let labelSize = tempLabel.intrinsicContentSize

        return CGSize(width: imageSize.width + labelSize.width, height: imageSize.height + labelSize.height)
    }

Upvotes: 1

Unima
Unima

Reputation: 1

width of label = width of image view. it is ok. for height, you can use Intrinsic Content Size function to get size of label.

Upvotes: 0

Related Questions