【问题标题】:Change horizontal uicollectionivew width bases on uiLabel text根据uiLabel文本更改水平collectionview宽度
【发布时间】:2019-07-27 22:10:54
【问题描述】:

我有一个水平集合视图。 每个单元格都有一个标签和一个图像。

我面临的问题是label从服务端渲染数据时,有时文字太大,会和图片重叠,因为每个单元格的宽度是固定的。

如何根据集合视图视图单元格包含的数据更改其宽度,以使标签不与图像重叠?

【问题讨论】:

    标签: ios uicollectionview swift4 uicollectionviewlayout


    【解决方案1】:

    CollectionView 确实有一个返回单元格大小的委托方法。

    请继承UICollectionViewDelegateFlowLayout并实现以下方法。

      func collectionView(_ collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,sizeForItemAt indexPath:  IndexPath) -> CGSize {
        return CGSize(width: 30, height: 30)
      }
    

    您可以计算标签宽度并将其返回给函数。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      先用与文本关联的字体计算标签文本的宽度。

      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 {
      
          // Note: Margins are spaces around the cell
          // model[indexPath.row].text is the text of label to be shown
          let newWidth = model[indexPath.row].text.size(with: labelFont!).width + margins + imageView.width 
          return CGSize(width: newWidth, height: collectionView.bounds.height)
      }
      

      注意:

      别忘了确认你的 viewController 到UICollectionViewDataSource, UICollectionViewDelegateFlowLayout

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-01
        • 2015-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多