Danial Kosarifa
Danial Kosarifa

Reputation: 1074

Modifying the size of the cell of UICollectionView

I am trying to modify the size of the cells that the UICollectionview contains. I believe that the sizeForItemAtIndexPath should do the trick. Yet nothing is happening.

I have looked into similar questions, they have advised doing the same thing. I am sort of suspicious of my inheritance.

The problem is that the cells remain in the same size regardless of the value they were fed in.

class HikeViewController: UIViewController {
    var test: Int?

    @IBOutlet weak var options: UICollectionView!


    override func viewDidLoad() {
        super.viewDidLoad()
        navigationController?.navigationBar.prefersLargeTitles = false
        print(test!)

        options.dataSource = self
        options.delegate = self

    }



}

extension HikeViewController: UICollectionViewDelegate, UICollectionViewDataSource {
    //collectionCell
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 2
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        var cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath as IndexPath)
        cell.backgroundColor = UIColor.green
        return cell
    }

    func collectionView(collectionView : UICollectionView,layout collectionViewLayout:UICollectionViewLayout,sizeForItemAtIndexPath indexPath:NSIndexPath) -> CGSize
    {
        return CGSize(width: 400, height: 500)
    }



    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print(indexPath.row)
    }



}

And when I conform to UICollectionViewDelegateFlowLayoutthe app termainates where I set the followings:

 options.dataSource = self
 options.delegate = self

And the error is:

Could not cast value of type 'HikingClub.HikeViewController' (0x108e1f948) to 'UICollectionViewDataSource' (0x10e723ff0).

It's worth adding that I have made sure of the connection between HikeViewController and the storyboard.

Upvotes: 0

Views: 115

Answers (3)

ragotrebor
ragotrebor

Reputation: 1

You need to specify that you implement the protocol UICollectionViewDelegateFlowLayout in your class declaration.

extension HikeViewController: UICollectionViewDelegateFlowLayout {}

also you have are not calling the delegate method, just defining a new one.

check the first parameter (collectionView -> _ collectionView)

func collectionView(_ collectionView : UICollectionView,layout collectionViewLayout:UICollec

Upvotes: 0

extension HikeViewController: UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {

}

It should be something like this

Upvotes: 1

Muhammed Gül
Muhammed Gül

Reputation: 875

  1. Make your extension a subclass of UICollectionViewDelegateFlowLayout

  2. Use the following function

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { // code }

Upvotes: 1

Related Questions