如何根据文本使UICollectioncell宽度动态

时间:2018-11-28 13:51:49

标签: ios swift dynamic uicollectionview

伙计们我想像这样enter image description here

更改单元格的大小

自动调整为文本。我能够实现的是 enter image description here

我尝试搜索但无法找到解决方案。如何使它动态化为文本。 标签来自模型类,单元格的自定义类的颜色和背景正在更改。

2 个答案:

答案 0 :(得分:1)

在下面的答案中进行了解释。

HorizontalCollectionView Content width and spacing

计算带有关联字体的字符串的大小。

extension String {
    func size(with font: UIFont) -> CGSize {
        let fontAttribute = [NSAttributedString.Key.font: font]
        let size = self.size(withAttributes: fontAttribute)
        return size
    }
}

collectionView(_, collectionViewLayout:_, sizeForItemAt)中返回计算的宽度以及collectionView的高度。

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

    let newWidth = titles[indexPath.row].size(with: labelFont!).width + 10 //Added 10 to make the label visibility very clear
    return CGSize(width: newWidth, height: collectionView.bounds.height)
}

答案 1 :(得分:0)

检查以下代码:-

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let btn = UIButton()
        btn.setTitle(?*self.arr[indexPath.row].name, for: .normal)
        let btnWidth =  ?*btn.intrinsicContentSize.width > UIScreen.main.bounds.width - 32 ? ?*btn.intrinsicContentSize.width - 32 : ?*btn.intrinsicContentSize.width
        return CGSize(width: (?*btnWidth), height: 48)
    }

您可以根据需要对其进行修改。如果您需要任何帮助,请发表评论。

希望它会有所帮助:)