UICollectionViewCell动态宽度和固定高度

问题描述 投票:1回答:3

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

enter image description here

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

ios gridview uicollectionview ios11 xcode9
3个回答
4
投票

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

  1. 使用容器视图创建UICollectionViewCell。
  2. 固定此容器可以使用自动布局查看单元格的边缘
  3. 将UILabel添加到此容器视图并将其固定到容器视图的所有边缘(为其提供背景颜色以区别于单元格背景)
  4. 在UICollectionViewCell子类中,您需要对容器视图的角进行舍入,例如self.containerView.layer.cornerRadius = self.containerView.height / 2
  5. 在UICollectionViewFlowLayoutDelegate方法中,estimatedSizeForItem返回单元格的近似大小(自动布局将计算实际大小。)

需要记住的重要一点是,您的单元格需要有足够的约束,以便自动布局引擎可以根据内容计算实际高度和宽度。

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


2
投票

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


0
投票

func collectionView(_ collectionView:UICollectionView,layout 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)
}
© www.soinside.com 2019 - 2024. All rights reserved.