UICollectionViewCell动态宽度和固定高度

时间:2017-10-09 12:52:12

标签: ios gridview uicollectionview ios11 xcode9

我需要制作椭圆形的UICollectionView单元格,其中高度是固定的,但宽度是动态的,它也有一个限制,如果文本长于那个,那么文本应该滚动。任何可用于此的第三方选项或需要使用UICollectionView创建自己的选项。请指导。

enter image description here

以下是我想要实现的图像。我想在开始之前知道我应该寻找第三方还是使用UICollectionView来制作自己的。我有很短的时间来完成这就是为什么要避免有时间去寻找自己的方向。请指导。请指导。

3 个答案:

答案 0 :(得分:4)

您可以使用UICollectionViewFlowLayout和Auto Layout来实现此目的。

  1. 使用容器视图创建UICollectionViewCell。
  2. 固定此容器以使用自动布局
  3. 查看单元格的边缘
  4. 将UILabel添加到此容器视图并将其固定到容器视图的所有边缘(为其提供背景颜色以区别于单元格背景)
  5. 在UICollectionViewCell子类中,您需要对容器视图的角进行舍入,例如: /* PIPE - backup zip */ var zip = fs.createReadStream(process.env.PWD+'/'+req.params.zip).pipe(res);
  6. 在UICollectionViewFlowLayoutDelegate方法中,estimatedSizeForItem返回单元格的近似大小(自动布局将计算实际大小。)
  7. 要记住的重要一点是,您的单元格需要有足够的约束,以便自动布局引擎可以根据内容计算实际高度和宽度。

    编辑:如果您想要一个固定的高度,请确保您的标签只能有一行。或者添加一个高度约束。

答案 1 :(得分:2)

最后,我找到了一个库TagListView,它可以通过cocoapods安装,并且还有很多自定义和快速4支持。

答案 2 :(得分:0)

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

  let nw = intersts[indexPath.row]

    let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
    let size = CGSize(width: 250, height: 1500)

    let estimatedFrame = NSString(string: nw).boundingRect(with: size, options: options, attributes: [NSAttributedStringKey.font : UIFont.systemFont(ofSize: 17)], context: nil)
    let attributes = [NSAttributedStringKey.font : UIFont.systemFont(ofSize: 17)]

    let yourLabelSize: CGSize = nw.size(withAttributes:attributes )
    var width1 = yourLabelSize.width + 30
    if width1 < 30 {
        width1 = 30
    }

    return CGSize(width: estimatedFrame.width+20, height: estimatedFrame.height+20)
}