iOS UICollectionView原型单元格大小属性被忽略

min*_*rat 63 collectionview ios uicollectionview

我正在使用带有两个原型单元的UICollectionView.原型单元格具有不同的宽度并包含不同的控件(图像视图和Web视图).我肯定会返回给定索引的正确原型单元格(所有单元格显示正确的内容),但忽略原型单元格大小,而是使用集合视图的项目大小.这不像是我手动设置大小.如果在实际显示属性时忽略属性,那么允许在故事板中调整原型单元的大小是什么意思?

Ale*_*ian 172

故事板编辑器中单元格的大小只是为了帮助您设计单元格.由于每个原型单元可以是不同的大小,因此UICollectionView不知道要为所有单元格选择哪个单元的大小.这就是为什么要分别设置要用于单元格的实际大小的原因.您可以在设计器中通过选择集合视图并在"大小"检查器中的"集合视图大小"标题下设置其"单元格大小宽度"和"高度"来完成此操作.

或者,您可以覆盖以下方法并返回一个CGSize对象,该对象指定要为每个单元格使用的大小.使用此方法,您实际上可以使每个单元格具有不同的大小:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)

例:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return CGSizeMake(100, 100);
}
Run Code Online (Sandbox Code Playgroud)

您的视图控制器需要是UICollectionViewDelegateFlowLayout的委托才能调用此方法.所以不要忘记将该委托声明添加到视图控制器的.h文件中,例如:

@interface MyViewController () <UICollectionViewDelegateFlowLayout>
Run Code Online (Sandbox Code Playgroud)

迅速

extension MyViewController : UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 100, height: 100)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果所有单元格大小相同,则指定大小的更有效方法是在"UICollectionViewFlowLayout"中设置它.例如`flow.itemSize = CGSizeMake(50,100);` (3认同)

Sam*_*Sam 19

如果所有的细胞是相同的大小,可以设置itemSizeUICollectionViewFlowLayout

例:

((UICollectionViewFlowLayout *) self.collectionViewLayout).itemSize = CGSizeMake(100, 100);
Run Code Online (Sandbox Code Playgroud)

  • 似乎collectionViewLayout.itemSize在IOS6中不可用 (2认同)

小智 7

Swift,为最新的iOS工作.

(collectionView.collectionViewLayout as! UICollectionViewFlowLayout).itemSize = cellSize
Run Code Online (Sandbox Code Playgroud)

我没有足够的积分来回复Sam,但关键是它不是UICollectionViewLayout而是UICollectionViewFlowLayout.


Ros*_*han 6

我有一个类似的问题,我在 sizeForItemAt 上设置了一个断点,并且我的集合中的每个单元格都会调用它,但是,代码中设置的大小从未反映在设备上。

在查看我的项目中的其他集合时,我注意到集合视图流布局在有问题的集合中略有不同。

通过在 Storyboard 中选择 Flow Layout

然后在大小检查器中设置单元格大小估计大小

这帮助我解决了我的问题。

但是,单元格的大小不会随 sizeForItemAt 中的内容而动态变化

  • 就我而言,“估计大小”设置为“自动”,将其设置为“无”也很重要。 (3认同)