UICollectionViewCell相对于其集合视图的大小

时间:2016-02-14 20:19:50

标签: ios autolayout uicollectionview uistoryboard uicollectionviewcell

我有一个(水平)集合视图,我通过自动布局约束更改其大小。但是,当集合视图的大小发生更改时,单元格保持相同的静态大小。

为了演示,这里是视图调试器中的集合视图(我已经标记了集合视图和它的一个单元格):

enter image description here

正如您所看到的,单元格仍保持原始大小,现在实际上比封装集合视图更高。

那么如何限制单元格始终适合其集合视图?

2 个答案:

答案 0 :(得分:0)

如果要调整视图大小,可以使用以下命令在旋转时重置项目大小,这将放在视图控制器子类中。

这应该是相当有效的,因为只有当可见视图控制器的大小发生变化时才会调用它。

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator;
{
  [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

  [coordinator animateAlongsideTransition:({
    ^(id<UIViewControllerTransitionCoordinatorContext> context) {

      UICollectionViewFlowLayout *layout = (id)self.collectionView.collectionViewLayout; {

        CGFloat height = CGRectGetHeight(self.collectionView.bounds);

        layout.itemSize = (CGSize) {
          .width  = height,
          .height = height
        };

      }

      [layout invalidateLayout];

    };
  }) completion:nil];

}

您还应该查看these answers以获取更多解决方案。

答案 1 :(得分:0)

我通过设置项目的高度和宽度等于集合视图的高度来解决这个问题。我在sizeForItemAtIndexPath中执行此操作:

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

因为在我的情况下,单元格需要是完美的正方形,所以将单元格的高度和宽度设置为集合视图的高度非常有效。

并非您的类必须实现UICollectionViewDelegateFlowLayout协议才能公开此方法。