如何根据内容设置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中为不可见单元格设置动画时如何防止延迟