在 Swift 中调整 UICollectionViewCell 大小时出错

Posted

技术标签:

【中文标题】在 Swift 中调整 UICollectionViewCell 大小时出错【英文标题】:Error in sizing UICollectionViewCell in Swift 【发布时间】:2014-11-04 20:57:04 【问题描述】:

我正在尝试根据其中包含的标签文本的长度调整每个集合视图单元格的大小

func collectionView(collectionView: UICollectionView, layout collectionViewLayout:UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize 
    var size = CGSize()    
    var cell = collectionView.dequeueReusableCellWithReuseIdentifier("lessonCell", forIndexPath: indexPath) as UICollectionViewCell
    var label: UILabel = cell.viewWithTag(300) as UILabel
    var labelSize = label.frame.size
    size = labelSize
    return size

运行代码时,应用程序崩溃并出现错误“流布局中不支持负或零大小”。但是,当我单步执行时,我发现在初始化单元格变量时发生了崩溃,甚至还没有确定大小。为什么初始化我的单元格变量会引发这种类型的错误?

【问题讨论】:

您找到解决方案了吗?有完全相同的问题。 :( @SeeMeCode 不确定你是否还需要它,但我在下面发布了我的解决方案。 【参考方案1】:

我发现了我的问题。我正在使用 collectionView.dequeueReusableCellWithReuseIdentifier() 而实际上这应该只与“cellForItemAtIndexPath”委托方法一起使用。对我有用的是以下代码:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize 
    var size = CGSize(width: 0, height: 0)
    var label = UILabel()
    label.text = category[indexPath.row]
    label.sizeToFit()
    var width = label.frame.width
    size = CGSize(width: (width+20), height: 50)
    return size

【讨论】:

我使用此处描述的 sizingCell 方法获得了很好的结果:***.com/a/53786943/1473527 它也更加通用。

以上是关于在 Swift 中调整 UICollectionViewCell 大小时出错的主要内容,如果未能解决你的问题,请参考以下文章

将分页 UICollectionView 高度调整为当前可见的 UICollectionViewCell

我需要创建一个UIImages数组,我从Swift中的Camera roll加载

Swift - 在标签中动态调整大小后动态调整视图大小

在 UIWebView 中调整文本大小 - Swift 3

使用 Swift 调整主屏幕亮度

在 Swift 中调整 UICollectionViewCell 大小时出错