progammingBeignner February 2016

Program UICollectionViewCell Programmtically.

I am trying to create a cell programmatically without using the story board, but i stumble upon some problems. The cell code is as following.

import UIKit

class ProductCategoryCollectionViewCell: UICollectionViewCell {


required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.setupCell()
}


var productCategoryImageView :UIImageView!

func setupCell(){
    //seting up the imageView as subView
    productCategoryImageView = UIImageView()
    productCategoryImageView.translatesAutoresizingMaskIntoConstraints = false
    let subViewDictionary = ["productCategoryImageViewKey" : productCategoryImageView]


    let productCategoryImageViewWidth = contentView.bounds.size.width
    let productCategoryImageViewHeight = contentView.bounds.size.height
    let productCategoryImageViewHorizontalConstrain = NSLayoutConstraint.constraintsWithVisualFormat("H:[productCategoryImageViewKey(\(productCategoryImageViewWidth))]", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: subViewDictionary)
    let productCategoryImageViewVerticalConstrain = NSLayoutConstraint.constraintsWithVisualFormat("V:[productCategoryImageViewKey(\(productCategoryImageViewHeight))]", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: subViewDictionary)

    productCategoryImageView.addConstraints(productCategoryImageViewHorizontalConstrain)


    productCategoryImageView.addConstraints(productCategoryImageViewVerticalConstrain)



    contentView.addSubview(productCategoryImageView)
    contentView.backgroundColor = UIColor(red: 1, green: 0, blue: 0, alpha: 0.4)
}

}

I am trying to create a subImageView which will be size of the cell, however, it doesn't scale to to the size of the cell.

Answers


Kiran Bhoraniya February 2016

/* create a UICollectionView Cell in Programmatically as above Code */

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
    uicollection=[[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout:layout];
    [uicollection setDataSource:self];
    [uicollection setDelegate:self];

    [uicollection registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
    [uicollection setBackgroundColor:[UIColor redColor]];

    [self.view addSubview:uicollection];


    // Do any additional setup after loading the view, typically from a nib.
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 15;
}

// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    cell.backgroundColor=[UIColor greenColor];

    return cell;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(50, 50);
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end


marosoaie February 2016

The size of the cell is not known when the init method is called. So setting the width and height to contentView.bounds.size.width and contentView.bounds.size.height won't work.

Instead of adding constraints for horizontal and vertical sizes you can add left, right, top and bottom constraints, like this:

let productCategoryImageViewHorizontalConstrain = NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[productCategoryImageViewKey]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: subViewDictionary)
let productCategoryImageViewVerticalConstrain = NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[productCategoryImageViewKey]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: subViewDictionary)

And you should also call contentView.addSubview(productCategoryImageView) before adding the constraints.

Post Status

Asked in February 2016
Viewed 3,470 times
Voted 12
Answered 2 times

Search




Leave an answer