Reputation: 354
Hii i want set height of UICollectionView cell based on image i get from url. can any one help me? i have checked some libraries in that they have given random height to cell. In this one random height given to cell. when i try to give image height like this it is giving result. space is coming between cells.
and also tried like this but not working space is coming between cell rows. see this
Upvotes: 2
Views: 2097
Reputation: 945
You can set the height as variable
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSize(width: 100, height: myHeight)
}
}
If your image is downloaded, call:
MyCollectionView.collectionViewLayout.invalidateLayout()
The question is old, but still actual
Upvotes: 0
Reputation: 937
Write in ViewDidLoad Method
for (int i=0; i<[imageURLArray count]; i++)
{
//Declare Globally
IMGArray1=[[NSMutableArray alloc] init];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:[imageURLArray objectAtIndex:i]]];
NSOperationQueue *urlQue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:urlQue completionHandler:^(NSURLResponse *response,
NSData *MoblieDatadata, NSError *error)
{
if ([MoblieDatadata length] >0 && error == nil)
{
UIImage *image = [[UIImage alloc]initWithData:MoblieDatadata];
[IMGArray1 addObject:image];
}
else if ([MoblieDatadata length] == 0 && error == nil)
{
NSLog(@"Nothing was downloaded.");
}
else if (error != nil)
{
NSLog(@"Error happened = %@", error);
dispatch_async(dispatch_get_main_queue(), ^{
});
}
}];
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
examplemycell *myCell = [collectionView
dequeueReusableCellWithReuseIdentifier:@"cell"
forIndexPath:indexPath];
UIImage *image;
int row = [indexPath row];
image = [UIImage imageNamed:IMGArray1[row]];
myCell.imageView.image = image;
return myCell;
}
#pragma mark -
#pragma mark UICollectionViewFlowLayoutDelegate
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
UIImage *image;
int row = [indexPath row];
image = [UIImage imageNamed:IMGArray1[row]];
return image.size;
}
//For setting spacing between collectionview cells
//use the delegate method like
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionView *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return 10; // This is the minimum inter item spacing, can be more
}
And Use this for verticle line spacing between cells
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
return 5;
}
Upvotes: 1