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

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

故事板编辑器中单元格的大小只是为了帮助您devise单元格。 由于每个原型单元格可以是不同的大小,UICollectionView不知道要为所有单元格select哪个单元格的大小。 这就是为什么您要分别设置您的单元格的实际大小。 您可以在devise器中通过select集合视图并在“大小”检查器中的“集合视图大小”标题下设置“像元大小宽度和高度”。

或者,您可以重写以下方法并返回一个CGSize对象,该对象指定要为每个单元格使用的大小。 使用这种方法,你实际上可以让每个单元格的大小不同:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 

例:

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

您的视图控制器需要成为UICollectionViewDelegateFlowLayout的委托才能调用此方法。 所以不要忘记把这个委托声明添加到你的视图控制器的.h文件中,比如:

 @interface MyViewController () <UICollectionViewDelegateFlowLayout> 

如果所有单元格大小相同,并且可以在itemSize上设置UICollectionViewFlowLayout

例:

 ((UICollectionViewFlowLayout *) self.collectionViewLayout).itemSize = CGSizeMake(100, 100); 

Swift,为最新的iOS工作。

 (collectionView.collectionViewLayout as! UICollectionViewFlowLayout).itemSize = cellSize 

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

在Swift中,您可以调用sizeForItemAtIndexPath委托方法来设置每个单元格的大小。

 func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { if indexPath.row == 0 { // Set the size for cell no. 0 }else if indexPath.row == 1 { // Set the size for cell no. 1 } } 

我希望有帮助。 谢谢!

如果所有单元格的大小相同,则只需将UICollectionView的单元大小属性设置为与UICollectionViewCell的大小属性相同即可。

您可以在UICollectionView属性中设置UICollectionViewCell大小。

在故事板中,在Document OutlineselectCollection View ,然后在Size Inspector编辑您的像Cell Size

如果是Custom,你应该把Cell的大小types改为Default。

使用其默认代理。 。 。

 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { CGSize mElementSize; mElementSize = CGSizeMake(SCREEN_WIDTH , SCREEN_HEIGHT *0.60); return mElementSize; }