以编程方式将 UILabel 添加到 UICollectionViewCell

Programmatically add a UILabel to a UICollectionViewCell

我有一个 UICollectionView,它以瀑布式布局呈现图像,效果很好。我现在正在尝试为每张图片添加描述。挑战是我试图以编程方式添加 UILabel,但它没有出现。我确定 label.text 包含文本。

class NTWaterfallViewCell :UICollectionViewCell, NTTansitionWaterfallGridViewProtocol{

    var photoName = ""
    var imageName : String?

    var imageViewContent : UIImageView = UIImageView()
    var label:UILabel = UILabel()

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = UIColor.lightGray
        contentView.addSubview(imageViewContent)
        contentView.addSubview(label)
    }
    override func layoutSubviews() {
        super.layoutSubviews()
        imageViewContent.frame = CGRect(x: 0, y: 0, width: frame.size.width, height: frame.size.height)
        imageViewContent.loadImageWithURL(imageName!)

        label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
        label.center = CGPoint(x: 160, y: 285)
        label.textAlignment = .center
        label.text = photoName
    }

您在代码中创建了两个 UILabel 实例 - 第一个实例位于 var label: UILabel = UILabel(),而这个实例已添加到 init 中的 contentView。

稍后,您将在 layoutSubViews() 中用新实例覆盖 self.label,但此新实例永远不会添加到 contentView。

重新安排您的代码,以便只创建和添加一个实例。