如何根据数据

时间:2017-10-22 10:31:57

标签: ios swift uicollectionviewcell

我有一个UICollectionView,其中一个单元格只包含一个标签。我已经实现了它正常工作,但是一些字符串值设置为在单元格内部标记切出。检查下图。

enter image description here

选择单元格应显示为"昨天前一天"。如果有一种方法可以根据数据长度调整单元格宽度,我可以解决这个问题。可能吗 ?

PS:以下方法提出了一些类似的问题。所以我试过但没有运气。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        if(collectionView == dateRangeCollectionView){
            return (dateRanges[indexPath.item] as NSString).size(attributes: nil)
        }else{
            return (OrderStatus[indexPath.item] as NSString).size(attributes: nil)
        }
    }

我不认为这种方法甚至存在于swift 4中。当我开始键入" sizeForItemAt" Xcode没有提出这种方法。

2 个答案:

答案 0 :(得分:0)

要计算每个单元格的大小,您需要确定文本的宽度,同时考虑给定的填充。使用它来获取单元格的宽度,并返回sizeForItem委托中的值。

func labelSizeWithString(text: String,fontSize: CGFloat, maxWidth : CGFloat) -> CGRect{
let font = UIFont.systemFontOfSize(fontSize)
let label = UILabel(frame: CGRectMake(0, 0, maxWidth, CGFloat.max))
label.numberOfLines = 0
label.font = font
label.text = text

label.sizeToFit()

return label.frame

}

如果希望文本以一行或两行显示,请使用numberOfLines选项。 对于您获得的宽度,请添加适当的填充值。

答案 1 :(得分:0)

请使用Self Sizing Cells。请按照以下步骤获取更多信息

自定义单元格仅支持流程布局,因此请确保您正在使用的内容。

请按照以下步骤操作:

  1. 在UICollectionViewFlowLayout上设置estimatedItemSize

  2. 添加对细胞亚类(Autolayout)上的大小调整的支持。 More info here

  3. 结帐此github回购:SelfSizingCollectionViewCell