UICollectionviewCell:计算完美单元格大小

Posted

技术标签:

【中文标题】UICollectionviewCell:计算完美单元格大小【英文标题】:UICollectionviewCell: compute perfect cellsize 【发布时间】:2015-08-16 15:18:22 【问题描述】:

我有一个 UICollectionView 填充了不同数量的单元格。 单元应尽可能完美地使用可用空间。为此,我计算每个单元格的可用空间。

应该在视图初始化时计算可用空间。每个单元格与所有内容的间距为 2pt。目前我用 64pt 硬编码导航栏和状态栏的空间,这不是未来的证明。

使用下面的代码,一切都在模拟器中运行,但在真实硬件 (iPhone5s) 上却没有:在我的物理 iPhone 上,高度计算不正确,最后一行和集合视图底部之间出现大约 30pt 的间隙.

知道如何改进代码吗?

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)
    

【问题讨论】:

在寻求代码方面的帮助时,请说明如何你所得到的东西是失败的。 如何您的代码在“真实硬件”上失败? 感谢您的评论 - 我添加了这个。 【参考方案1】:

我是这样做的 (在 UICollectionViewController 实现中):

- (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)

【讨论】:

这没有回答我的问题,因为它忽略了不同的设备 @netshark1000 “它忽略不同的设备”是什么意思?您获得了 view.frame 大小并计算了当前 view.frame 的最佳单元格大小。将此尺寸写入方法sizeForItemAtIndexPath,一切都会好起来的。

以上是关于UICollectionviewCell:计算完美单元格大小的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UICollectionViewCell contentView 动画

UICollectionViewCell:AutoLayout - 尺寸计算不正确(偏移 10 pt)

无法使用 AutoLayout 设置 UICollectionViewCell 的宽度

当我尝试允许用户创建自己的 uicollectionviewcell 时,iOS 模拟器中没有出现任何内容

UICollectionViewCell的自动宽度大小-Swift

动态缩小 UICollectionViewCell 的高度