在UICollectionView中,单元格不会坐在底部

注意事实certificate这是一个简单的错误,单元不会“坐在底部”。 然而,这是一个有趣的问题:“如何上下移动细胞”。 在暴力解决scheme下面:编写你自己的stream程布局。

我很惊讶,唯一的方法是完全子类UICollectionViewFlowLayout并在layoutAttributesForElementsInRect写一些棘手的代码。

这可能会在将来帮助某人,因为layoutAttributesForElementsInRect代码很less。 希望能帮助到你。

事实certificate,我的细胞不会坐在底部的原因是我以前在我的UICollectionViewController中有这个…

 -(void)viewDidLoad { [super viewDidLoad]; // the following code is very useful to, for example, // "nudge short lists towards the middle..." - if you want the list // to more sit in the middle of the screen, when only a few items. cvHeight = CGRectGetHeight(self.collectionView.bounds); [self.collectionView setContentInset: UIEdgeInsetsMake(cvHeight * 0.175, 0, cvHeight * 0.30, 0) ]; //top,l,b,r } 

当然,当我改变为“全视angular单元尺寸”(每个屏幕一个单元)时,该代码失败。


我有一个简单的UICollection视图,这是一个iPhone的宽度,约250高。 单元格与收集视图的大小完全相同。

细胞不会居中,他们总是坐高。 (即在视野外)。

在这里输入图像说明

我的collections查看故事板中的“尺寸”都是零。 可能是什么问题呢?

这里有一个“蛮力”的方式来解决这个问题 – 写你自己的FlowLayout!

有用 …

 class SimpleFlowLayout: UICollectionViewFlowLayout { override init() { super.init() initialize() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) initialize() } func initialize() { self.scrollDirection = .horizontal self.minimumInteritemSpacing = 0.0 self.minimumLineSpacing = 0.0 } override var collectionViewContentSize: CGSize { return super.collectionViewContentSize } override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { let allItems = super.layoutAttributesForElements(in: rect) for attribute in allItems! { print ("attribute.frame.origin.y ..... \(attribute.frame.origin.y)") attribute.frame = CGRect(x: attribute.frame.origin.x, y: attribute.frame.origin.y + 34, width: attribute.frame.size.width, height: attribute.frame.size.height) // "go figure" ... add 34 } return allItems; } 

你“设置”一个UICollectionViewFlowLayout的方式基本上是这样的…(据我所知!)

 class YourFancyDisplay: UICollectionViewController { override func viewDidLoad() { super.viewDidLoad() collectionView!.contentInset = UIEdgeInsetsMake(0, 0, 0, 0) collectionView!.collectionViewLayout = SimpleFlowLayout() ... 

尝试这个。 希望它可以帮助

 -(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return collectionView.frame.size; } 

(对于未来的读者,确实你通常也需要另一个…)

 -(CGSize) collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return self.view.frame.size; } -(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { return UIEdgeInsetsMake(0,0,0,0); //t,l,b,r }