根据标签文本自定义 UICollectionViewCell 自身大小

Posted

技术标签:

【中文标题】根据标签文本自定义 UICollectionViewCell 自身大小【英文标题】:Custom UICollectionViewCell self size according to the label text 【发布时间】:2020-03-10 14:52:32 【问题描述】:

我创建了一个 UICollectionViewCell xib,并希望单元格根据标签文本的长度自动调整,如下图所示。

图片显示了我在原型单元上制作的内容。但无论我怎么尝试,当我使用 xib 时,单元格的大小都保持不变。

【问题讨论】:

【参考方案1】:

实现这个委托 UICollectionViewDelegateFlowLayout

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

        let market = self.markets[indexPath.row]
        let label = UILabel(frame: CGRect.zero)
        label.text =  market
        label.sizeToFit()
        return CGSize(width: label.frame.width, height: 25)
    

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
        let text = NSAttributedString(string: markets[indexPath.row])
        return CGSize(width: text.size().width, height: 25)
    

【讨论】:

【参考方案2】:

你也可以在 sizeForItemAt 中实现这个 只需插入“yourString”和“yourFont”:

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

    let width = yourString.size(withAttributes: [NSAttributedString.Key.font: yourFont]).width
    return CGSize(width: width, height: 20) 

由于单元格的角半径,您可能需要在宽度上添加一些空间

【讨论】:

以上是关于根据标签文本自定义 UICollectionViewCell 自身大小的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中自定义标签栏宽度?

自定义标签渲染器在 Xamarin iOS 的滚动列表视图中显示错误的文本样式

如何根据文本输入类型在自定义键盘中标记返回键

根据 JSON 文件中的内容文本调整带有 UILabel 的自定义单元格的大小

谷歌标签管理自定义JS - 错误时返回值

使用 UITableViewAutomaticDimension 显示多行标签的自定义单元格