自动布局中的UICollectionView单元格大小

6
我在启用自动布局的Storyboard下使用了UICollectionView。 我试图根据collectionView本身来设置单元格大小,这是基于[collectionView:layout:sizeForItemAtIndexPath:]方法完成的。 collectionView也依赖于自动布局,在第一次使用时会给出错误的大小(我认为这是在视图布局之前)。 我知道它们将在viewDidLayoutSubviews方法被调用后拥有正确的大小,但这会导致重载collectionView项目两次,从而在运行时造成UI故障。
以下是我的实现中[collectionView:layout:sizeForItemAtIndexPath:]方法:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CGSize innerSize = CGSizeMake(galleryView.frame.size.width - 80, galleryView.frame.size.height - 40);
    GLPhotoAsset *photo = [(PCOpticsPhotoPoint *)_cluster.points[indexPath.row] photo];
    CGFloat ratio = MIN(innerSize.width / photo.size.width, innerSize.height / photo.size.height);

    return CGSizeMake(photo.size.width * ratio, photo.size.height * ratio);
}

“我正在尝试根据collectionView设置单元格大小” 这里不明白你的意思? - Kyle Truscott
@KyleTruscott 我正在计算并返回基于collectionView的[cellSize]在[collectionView:layout:sizeForItemAtIndexPath:]方法中。问题是这个方法在自动布局完成之前被调用了。 - Pei
@KyleTruscott 我已经编辑了问题,包括那个方法。 - Pei
谢谢,@pei。这更有意义:您希望单元格的大小与整个collectionView rect相关。您是否在任何时候自己调用了[galleryView reloadData] - Kyle Truscott
我不需要它。它只会在第一次加载时使用。 - Pei
显示剩余3条评论
2个回答

1

确保您的视图的Clip Subviews属性已选中...

并且您的collectionView属性cellSize必须在大小和位置部分适当...

也许这会对您有所帮助...


0

由于在调用sizeForItemAtIndexPath:之前获取到了错误的布局大小,因此请前往Storyboard检查这3个元素的单元格大小CollectionViewCollectionViewCellCollectionViewFlowLayout

将它们设置为相同的大小(也可以根据您需要的默认集合视图大小设置大小)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接