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

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

【问题讨论】:

    标签: ios swift uicollectionview uicollectionviewcell uicollectionviewlayout


    【解决方案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 您需要帮助或建议我如何回答吗?
      • 查看我之前关于如何改进的问题。在我的世界里,缺少一些信息。我无法让代码工作。
      猜你喜欢
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-18
      • 2021-07-04
      • 2020-06-21
      • 1970-01-01
      相关资源
      最近更新 更多