所以我遇到了我认为应该非常简单的最奇怪的麻烦。这是我的collectionView
所以..因为你可以看到正确的图像被切断了。现在这里是奇怪的部分。这是我的cellForItemAtIndexPath
方法:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 164, 164)]; // 0 0 164 141
[cell.contentView addSubview:imageView];
imageView.image = usersPhotos[indexPath.row];
return cell;
}
这是我的情节提要文件中的 UICollectionView :
注意我在storyboard文件中的collectionViewCell是155 x 155,而我的 imageView 是164x164。我这样做是因为我出于某种原因无法解决这个问题:
我的 imageView 设置为155x155(与单元格大小相同),我们得到的内容如下:
那我在这里做错了什么?很明显,我不想要那个白色间距(如上所示),我不能再扩展我的UICollectionViewCell了,因为155是最大宽度,因为某些原因在故事板上如果你达到156的宽度它会让细胞占用整列,没有留下第二列的空间,这就是我需要的。
我怎样才能简单地完成这项工作?非常感谢任何帮助,我很遗憾为什么我遇到这种行为以及我做错了什么。
答案 0 :(得分:1)
在您的故事板中展开视图控制器并选择“集合视图流程布局”,如下所示:
然后在您的尺寸检查器中找到Min Spacing,如下所示:
将“For Cells”间距更改为0.这样您就可以在不间隔任何间距的情况下调整单元格,并将单元格大小增加到160(屏幕宽度为320)。
这会将我的故事板布局从此更改为此,单元格大小为160w:
然后,当我运行应用程序时,所有细胞都在接触:
答案 1 :(得分:0)
现在您的单元格大小在故事板中是硬编码的,您必须使其动态化,以便根据您的应用运行的设备进行更改。
你必须实现UICollectionViewFlowLayoutDelegate方法,如下所示:
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout*)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return CGSizeMake(collectionView.frame.size.width/2, collectionView.frame.size.width/2);
}
答案 2 :(得分:0)
您的单元格需要根据设备的大小以及部分插入和项目间距调整大小。
在情节提要中,确保在集合视图的“属性”检查器中选择“流”布局。
然后,实现sizeForItemAtIndexPath
并使用section insets计算:
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout*)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
// Get the flow layout properties
UICollectionViewFlowLayout *flowLayout = ((UICollectionViewFlowLayout*)collectionViewLayout);
// Calculate the usable width for the cell
CGFloat usableWidth = collectionView.frame.size.width - flowLayout.sectionInset.left - flowLayout.sectionInset.right - flowLayout.minimumInteritemSpacing;
// Return the proper size
return CGSizeMake(usableWidth / 2, usableWidth / 2);
}