如何找到最大可能的项目数可以放在UICollectionView行中?

时间:2015-12-30 08:18:07

标签: ios objective-c swift uicollectionview uicollectionviewlayout

如何找到最大可能的项目数可以放在UICollectionView行?

在以下示例中为3。

enter image description here

4 个答案:

答案 0 :(得分:1)

Apple的UICollectionViewFlowLayout不会“知道”它可以在屏幕上显示的最大项目数。它基本上只计算下一个单元格的坐标,将其放在上一个单元格的旁边,并验证它是否适合在屏幕上运行。如果没有,它将重新计算新坐标,将单元格放置为下一行/列的第一个元素(取决于方向)。

你可以用公式做同样的事情。这样的事情可能是:

int verticalCount = (int)((self.collectionViewContentSize.width - self.minimumInteritemSpacing)/(self.itemSize.width + self.minimumInteritemSpacing));
int horizontalCount = (int)((self.collectionViewContentSize.height - self.minimumLineSpacing)/(self.itemSize.height + self.minimumLineSpacing));

答案 1 :(得分:0)

使用这个公式

int noOfCell = (self.view.frame.size.width - leftPadding - rightPadding)/(cell.frame.size.width + spacebetweenCells);

答案 2 :(得分:0)

在考虑了 @Kujey 的答案后,如果换了幻灯片,我可以找到以下解决方案。

func maximumNumberOfCellsInARow() -> Int {

    let collectionViewFlowLayout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout

    return Int((collectionView.contentSize.width - collectionViewFlowLayout.minimumInteritemSpacing)/(collectionViewFlowLayout.itemSize.width + collectionViewFlowLayout.minimumInteritemSpacing))
}

@Kujey,对不起我无法将你的答案标记为正确的答案,即使我的答案来自你的答案,因为它需要一个重大的改变。

答案 3 :(得分:0)

我创建了这个公式,你可以使它复杂化,包括section insets和其他params。

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    NSUInteger totalItems = X; 
    UICollectionViewFlowLayout* collectionViewLayout = (UICollectionViewFlowLayout *)collectionView.collectionViewLayout;

    NSLog(@"MAX WIDTH: %li",(long) collectionView.frame.size.width);

    NSUInteger maxVisibleItems = (collectionView.frame.size.width + collectionViewLayout.minimumInteritemSpacing) / (collectionViewLayout.itemSize.width + collectionViewLayout.minimumInteritemSpacing);

    NSLog(@"MAX VISIBLE ITEMS: %li",(long) maxVisibleItems);
    if (totalItems < maxVisibleItems ) {
       return totalItems;
    }else{

       return maxVisibleItems;
    }

}