以编程方式将 UILabel 添加到 UICollectionViewCell

Posted

技术标签:

【中文标题】以编程方式将 UILabel 添加到 UICollectionViewCell【英文标题】:Programmatically add a UILabel to a UICollectionViewCell 【发布时间】:2017-09-25 14:39:57 【问题描述】:

我有一个 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
    

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于以编程方式将 UILabel 添加到 UICollectionViewCell的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将 UILabel 添加到工具栏

以编程方式将点击手势添加到 UILabel

以编程方式将 UILabel 添加到集合单元,快速

以编程方式将 UILabel 添加到自定义 tableViewCell

以编程方式将 UILabel 和 UIImageViews 添加到 UIScrollView

在 Swift 4 中以编程方式将 UIImageView、UILabel 添加到 UIStackView