UICollectionView iOS8的问题

时间:2015-08-12 19:53:43

标签: ios objective-c uicollectionview uicollectionviewcell

所以我遇到了我认为应该非常简单的最奇怪的麻烦。这是我的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的宽度它会让细胞占用整列,没有留下第二列的空间,这就是我需要的。

我怎样才能简单地完成这项工作?非常感谢任何帮助,我很遗憾为什么我遇到这种行为以及我做错了什么。

3 个答案:

答案 0 :(得分:1)

在您的故事板中展开视图控制器并选择“集合视图流程布局”,如下所示:

enter image description here

然后在您的尺寸检查器中找到Min Spacing,如下所示:

enter image description here

将“For Cells”间距更改为0.这样您就可以在不间隔任何间距的情况下调整单元格,并将单元格大小增加到160(屏幕宽度为320)。

这会将我的故事板布局从此更改为此,单元格大小为160w:

enter image description here enter image description here

然后,当我运行应用程序时,所有细胞都在接触:

enter image description here

答案 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);

}