如何根据内容设置collectionview单元格宽度?

Posted

技术标签:

【中文标题】如何根据内容设置collectionview单元格宽度?【英文标题】:How to set collectionview cell width based on content? 【发布时间】:2018-03-24 13:09:34 【问题描述】:

我有一个水平滚动的collectionview。单元格包含一个标签。我想根据标签的内容调整单元格宽度。如何实现?请帮我解决这个问题

【问题讨论】:

【参考方案1】:

而不是调用 sizeforitem

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

 return CGSize(width: 100, height : 100)

您可以将布局属性设置为根据标签内容自动调整大小

let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
layout.minimumLineSpacing = 0
layout.minimumInteritemSpacing = 0
layout.estimatedItemSize = CGSize(width: 100, height: 30)

【讨论】:

【参考方案2】:

使用该函数计算标签宽度

func widthOfString(usingFont font: UIFont) -> CGFloat 
     let fontAttributes = [NSFontAttributeName: font]
     let size = self.size(attributes: fontAttributes)
     return size.width

使用UICollectionViewDelegateFlowLayout设置collectionViewCell的大小

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
let width = //calculated width of label from func
   return CGSize(width: width, height:requiredHeight)

【讨论】:

在函数widthOfString中,那是一个什么样的类?换句话说,我应该把 widthOfString 函数放在哪里?我无法让示例代码工作。为什么不给宽度赋值?是否应该将其分配给 widthOfString 的值?我认为更完整的答案会给予支持。 @JohanKarlsson 您需要帮助或建议我如何回答吗? 查看我之前关于如何改进的问题。在我的世界里,缺少一些信息。我无法让代码工作。

以上是关于如何根据内容设置collectionview单元格宽度?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据用户选择在 CollectionView 标题下方显示不同的单元格?

根据 IndexPath 设置特定 CollectionView 单元格的背景颜色

如何根据其中的内容创建具有动态高度的集合视图?

尝试在collectionview中为不可见单元格设置动画时如何防止延迟

如何在 Collectionview 单元格中为 Uiimageview 设置圆角

使用类似“标签”的单元格设置 collectionView