iOS:自适应集合视图单元格宽度

Posted

技术标签:

【中文标题】iOS:自适应集合视图单元格宽度【英文标题】:iOS : Adaptive Collection View cell width 【发布时间】:2014-12-23 14:58:27 【问题描述】:

我正在尝试在 ios 上制作具有自适应列宽的网格视图。 在 android 上,可以通过将 stretchMode 属性设置为 spacingWidth 来做到这一点。 此属性将单元格宽度作为最小宽度,如果有可用空间但不足以添加另一列以保持列之间的相同空间,则自动增长单元格。

我没有在 iOS 上找到任何方法。

在 iPhone 6 上看起来像那样(左图),但在 iPhone 5(右图)上,空间又大又丑。我不想自动调整单元格大小以避免这个大空间。

我如何在 iOS 上做到这一点?

(我使用的是 Xcode 6.1)

谢谢

编辑: 这就是我为什么不这样做的原因(黑色空间大约是需要额外的单元格宽度,抱歉我的画很丑我很快就做到了)

编辑 2:

我试图用这段代码计算新的大小,但结果是“奇怪的”(错误的大小、位置),我想我错过了什么

    let CELL_SIZE : Float = 92
    let CELL_MARGIN : Float = 10
    let COLLECTION_VIEW_MARGIN : Float = 20 //Left right margin
    let screenWidth = Float(UIScreen.mainScreen().bounds.width)
    let numberOfCell =  Float(Int(screenWidth / (CELL_SIZE + CELL_MARGIN + COLLECTION_VIEW_MARGIN)))

    let oldCellSize = Float(cell.frame.width)
    var newCellSize : Float
    if(numberOfCell >= 2)
        newCellSize = (screenWidth / numberOfCell) - (CELL_MARGIN * (numberOfCell-1))
     else 
        newCellSize = (screenWidth / numberOfCell)        

    let indexPathRow = Float(indexPath.row)

    var xOffsetMultiplier = indexPathRow % numberOfCell
    if(xOffsetMultiplier == 0)
        xOffsetMultiplier = numberOfCell
    

    var newX : Float = 0
    if(xOffsetMultiplier == 1)
        newX = COLLECTION_VIEW_MARGIN / 2
     else 
        newX = (newCellSize + CELL_MARGIN) * (xOffsetMultiplier-1) + (COLLECTION_VIEW_MARGIN / 2)
    

    var frame = CGRectMake(CGFloat(newX), cell.frame.minY, CGFloat(newCellSize), cell.frame.height)

    cell.frame = frame

这段代码写在我的 ViewController 中的func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell

【问题讨论】:

根据屏幕大小设置单元格宽度。 如果我这样做,我认为它只会显示一列,是真的吗?我用更多关于我需要什么的信息编辑了我的问题 如果屏幕尺寸 320 设置项目尺寸 154*154。 4 边距 + 154 项目 + 4 边距 + 154 项目 + 4 边距 = 320。如果屏幕尺寸 400 设置项目尺寸 120*120 边距变为 10。这是示例 ;) 我尝试以编程方式执行此操作(已编辑问题),但我不知道如何计算 【参考方案1】:

您应该使用UICollectionViewFlowLayout 根据集合视图大小采用单元格大小。

【讨论】:

你有样品吗?在 Interface Builder 中,Layout 属性设置为 flow,我不确定是不是这样,我不明白如何配置它来自动调整单元格宽度

以上是关于iOS:自适应集合视图单元格宽度的主要内容,如果未能解决你的问题,请参考以下文章

layui 的数据表格 列宽度自适应应该怎么设置

如何控制Listview每列的宽度自适应这列最长的内容

小5聊C# NPOI添加图片到Excel指定单元格并自适应宽度

iOS 根据给定宽度自适应文字大小

iOS自动调整UITableViewHeaderFooterView.ContentView子视图中的自定义单元格宽度

POI导出excel:设置字体颜色行高自适应列宽自适应锁住单元格合并单元格...