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