0

I have a custom UIView say CustomView which has a UICollectionView as its SubView. I have added this customView inside a UITableView Prototype Cell and pined all four (top, bottom, left, right) edges to the standard distance with TableViewCell.contentView.

Now i want to set the UICollectionView section insect. In this method - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section when i get UICollectionView.bounds.width, i always get 600 no matter if i am running it on 4s, 5s, 6 or 6 plus or iPad. This is very annoying and i can't set the proper insect for the UICollectionView section insect. Any help will be great. thanks

Here is my code.

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {

  NSInteger number = [self collectionView:collectionView numberOfItemsInSection:section];
  NSIndexPath *firstIndexPath = [NSIndexPath indexPathForItem:0 inSection:section];
  CGSize firstSize = [self collectionView:collectionView layout:collectionViewLayout sizeForItemAtIndexPath:firstIndexPath];
  NSIndexPath *lastIndexPath = [NSIndexPath indexPathForItem:number - 1 inSection:section];
  CGSize lastSize = [self collectionView:collectionView layout:collectionViewLayout sizeForItemAtIndexPath:lastIndexPath];
  UIEdgeInsets  insect =  UIEdgeInsetsMake(0, (collectionView.bounds.size.width - firstSize.width) / 2,
                                           0, (collectionView.bounds.size.width - lastSize.width) / 2);

  return insect;

}

here is my initlize of my CustomView which has collectionView as a subView

- (void) initilize {
  UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc ] init];
  flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
  self.collectionView = [[UICollectionView alloc] initWithFrame:self.bounds collectionViewLayout: flowLayout];
  self.collectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
  [self.collectionView registerClass:[PickerCollectionViewCell class] forCellWithReuseIdentifier:@"PickerCollectionViewCell"];
  self.collectionView.delegate = self;
  self.collectionView.dataSource = self;
  self.collectionView.backgroundColor = [UIColor clearColor];
  self.collectionView.showsHorizontalScrollIndicator = NO;
  self.collectionView.allowsMultipleSelection = YES;
  [self addSubview:self.collectionView ];
  self.backgroundColor = [UIColor clearColor];
}

Attached are also two images for my story board.

enter image description here

enter image description here

In the second picture pickerView is my CustomView which contains UICollectionView.

Any help will be great.

Madu
  • 4,849
  • 9
  • 44
  • 78

1 Answers1

1

Width equals 600 because you take it before UIView updates constraint for current screen. You can check UICollectionView frame in - (void)viewDidLayoutSubviews method and you will receive actual value.
Here is two options:
1) You can make insects calculation independent from UICollectionView frame
or
2) You can re-calculate collection view layout after when viewDidLayoutSubviews fires and redraw UICollectionView
(I would rather the first one)

shpasta
  • 1,913
  • 15
  • 21