我有一个(水平)集合视图,我通过自动布局约束更改其大小。但是,当集合视图的大小发生更改时,单元格保持相同的静态大小。
为了演示,这里是视图调试器中的集合视图(我已经标记了集合视图和它的一个单元格):
正如您所看到的,单元格仍保持原始大小,现在实际上比封装集合视图更高。
那么如何限制单元格始终适合其集合视图?
答案 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协议才能公开此方法。