答案 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;
}
}