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是的,这是用于重新排序的自定义布局。但或多或少是一个标准的流布局。布局最终通过计算环境来放置单元格,因此它也知道该信息(有多少行和多少列)。怎么把它弄出来?