Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何找到UICollectionView行中可以放置的最大项目数?_Ios_Objective C_Swift_Uicollectionview_Uicollectionviewlayout - Fatal编程技术网

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

Ios 如何找到UICollectionView行中可以放置的最大项目数?,ios,objective-c,swift,uicollectionview,uicollectionviewlayout,Ios,Objective C,Swift,Uicollectionview,Uicollectionviewlayout,如何找到可放置在UICollectionView行中的最大项目数 在下面的例子中是3 使用此公式 int noOfCell = (self.view.frame.size.width - leftPadding - rightPadding)/(cell.frame.size.width + spacebetweenCells); 苹果的UICollectionViewFlowLayout不“知道”它可以在屏幕上显示的最大项目数。它基本上只是计算下一个单元格的坐标,将其放置在上一个单元格的旁边

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

在下面的例子中是3

使用此公式

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

苹果的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));

在考虑了答案形式@Kujey后,我可以通过改变幻灯片找到如下解决方案

func maximumNumberOfCellsInARow() -> Int {

    let collectionViewFlowLayout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout

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

@Kujey,很抱歉,我无法将你的答案标记为正确答案,即使我的答案是从你的答案中派生出来的,因为它需要重大更改

我已经创建了这个公式,您可以将其复杂化,包括剖面插图和其他参数

-(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;
    }

}
-(NSInteger)collectionView:(UICollectionView*)collectionView项目编号section:(NSInteger)section{
总项目数=X;
UICollectionViewFlowLayout*collectionViewLayout=(UICollectionViewFlowLayout*)collectionView.collectionViewLayout;
NSLog(@“最大宽度:%li”,(长)collectionView.frame.size.WIDTH);
NSInteger maxVisibleItems=(collectionView.frame.size.width+collectionViewLayout.minimumInteritemSpacing)/(collectionViewLayout.itemSize.width+collectionViewLayout.minimumInteritemSpacing);
NSLog(@“最大可见项:%li”,(长)最大可见项);
if(totalItems
您应该创建一个公式,例如总宽度/(集合视图单元格宽度+填充)=行中的项目数您使用的是自定义布局还是流布局?这可能取决于屏幕大小、方向、单元格宽度、,填充等。
UICollectionView
是动态的,所以我不希望事情保持不变。@MidhunMP是的,这是用于重新排序的自定义布局。但或多或少是一个标准的流布局。布局最终通过计算环境来放置单元格,因此它也知道该信息(有多少行和多少列)。怎么把它弄出来?