Ios UICollectionviewCell:计算完美单元格大小
我有一个UICollectionView,其中填充了不同数量的单元格。 电池应尽可能完美地利用可用空间。为此,我计算每个单元的可用空间 视图初始化时应计算可用空间。每个单元格与所有单元格的间距为2pt。目前我已经用64pt硬编码导航栏和状态栏的空间,这不是未来的证明 使用下面的代码,所有东西都在模拟器中工作,但在真正的硬件(iPhone5s)上却不工作:在我的物理iPhone上,高度计算不正确,在最后一行和集合视图底部之间出现了大约30磅的间隙 你知道如何改进代码吗Ios UICollectionviewCell:计算完美单元格大小,ios,uicollectionview,Ios,Uicollectionview,我有一个UICollectionView,其中填充了不同数量的单元格。 电池应尽可能完美地利用可用空间。为此,我计算每个单元的可用空间 视图初始化时应计算可用空间。每个单元格与所有单元格的间距为2pt。目前我已经用64pt硬编码导航栏和状态栏的空间,这不是未来的证明 使用下面的代码,所有东西都在模拟器中工作,但在真正的硬件(iPhone5s)上却不工作:在我的物理iPhone上,高度计算不正确,在最后一行和集合视图底部之间出现了大约30磅的间隙 你知道如何改进代码吗 private func c
private func computeCellSizes(var size :CGSize){
if(size == CGSizeZero){
size = self.collectionView!.frame.size
}
self.numberOfRows = Int(size.width / 103)
//spacing of 2 points between each cell
let availableWidth = size.width - CGFloat((self.numberOfRows + 1) * 2)
let cellWidth = availableWidth / CGFloat(numberOfRows)
self.numberOfColumns = Int(size.height / (cellWidth * 1.3))
//spacing of 2 points between each cell, minus navigationcontroller height
let availableHeight = size.height - CGFloat((numberOfColumns + 1) * 2) - 64
let cellHeight = availableHeight / CGFloat(numberOfColumns)
let cellSize = CGSizeMake(cellWidth, cellHeight)
self.cachedSizes.setObject(NSValue(CGSize: cellSize), forKey: size.width)
}
我是这样做的
(在UICollectionViewController实现中):
在寻求代码方面的帮助时,请解释您所得到的是如何失败的。你的代码是如何在“真正的硬件”上失败的?谢谢你的评论-我添加了这个。这并没有回答我的问题,因为它忽略了不同的问题devices@netshark1000“它忽略不同的设备”是什么意思?您已获得view.frame大小并计算当前view.frame的最佳单元格大小。在方法
sizeFormiteIndeXPath
中写入此大小,一切都会好起来。
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
return UIEdgeInsetsMake(10, 10, 10, 10); //spacing on margins (top, left, bottom, right)
}
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake((self.view.frame.size.width - 40)/3, 100.0); // I show 3 cell for one row (-40 - spaces between cells and screen sides)
}