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 模拟器中没有出现任何内容