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

Ios UICollectionViewCell相对于其集合视图的大小,ios,autolayout,uicollectionview,uistoryboard,uicollectionviewcell,Ios,Autolayout,Uicollectionview,Uistoryboard,Uicollectionviewcell,我有一个(水平)集合视图,通过自动布局约束更改其大小。但是,当集合视图的大小更改时,单元格的静态大小保持不变 为了演示,这里是视图调试器中的collection视图(我已经标记了collectionview及其一个单元格): 如您所见,单元保持原始大小,现在实际上比其包围集合视图更高 因此,如何约束单元格始终适合其集合视图?如果要调整视图大小,可以使用以下命令在旋转时重置项目大小,这将进入视图控制器子类 这应该是相当有效的,因为只有当可视视图控制器的大小更改时才会调用它 - (void)vie

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

为了演示,这里是视图调试器中的collection视图(我已经标记了collectionview及其一个单元格):

如您所见,单元保持原始大小,现在实际上比其包围集合视图更高


因此,如何约束单元格始终适合其集合视图?

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

这应该是相当有效的,因为只有当可视视图控制器的大小更改时才会调用它

- (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];

}
-(void)视图将转换大小:(CGSize)带有转换协调器的大小:(id)协调器;
{
[super ViewWillTransitionSize:size with TransitionCoordinator:coordinator];
[协调员动画长边过渡:({
^(id上下文){
UICollectionViewFlowLayout*布局=(id)self.collectionView.collectionViewLayout{
CGFloat height=CGRectGetHeight(self.collectionView.bounds);
layout.itemSize=(CGSize){
.宽度=高度,
.高度=高度
};
}
[layout invalidateLayout];
};
})完成:无];
}

您还应该查看更多解决方案。

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

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(collectionView.frame.size.height, collectionView.frame.size.height);
}
因为在我的例子中,单元格需要是完美的正方形,所以将单元格的高度和宽度设置为集合视图的高度非常有效


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

是否始终要使其适合高度?@OliverAtkinson是的,单元格的高度和宽度应等于集合视图的高度,我通过在sizeForItemAtIndexPath中将单元格的大小设置为集合视图高度的大小来解决这个问题。谢谢你的帮助