如何在我的UICollectionView单元格中设置标签?

时间:2017-07-12 17:22:22

标签: ios swift uicollectionview

我几乎整整一天都在苦苦挣扎,无法找到解决方案。我正在尝试在视图控制器中创建一个UICollectionView,其中每个单元格中只有一个标签。但是,无论我做什么,我似乎无法将标签作为子视图添加到单元格中。这是我在主视图控制器中的代码:

var collectionView: UICollectionView!

  func configureCollectionView()
    {
        let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
        layout.scrollDirection = .horizontal
        layout.itemSize = CGSize(width: 50, height: 20)

        let y = interestsUnderline.frame.origin.y + 5
        let width = interestsUnderline.frame.width
        let frame = CGRect(x: 40, y: y, width: width, height: 30)
        collectionView = UICollectionView(frame: frame, collectionViewLayout: layout)

        collectionView?.dataSource = self
        collectionView?.delegate = self
        collectionView?.register(InterestsCell.self, forCellWithReuseIdentifier: "InterestsCell")
        collectionView?.showsHorizontalScrollIndicator = false
        view.addSubview(collectionView!)
    }

我从viewDidLayoutSubviews调用configureCollectionView()。这是我在集合视图单元格中的代码。

    class InterestsCell: UICollectionViewCell {

    override init(frame: CGRect) {
        super.init(frame: frame)

        setupViews()
    }

    let label: UILabel = {
        let label = UILabel()
        label.text = "Hello"
        label.textColor = .white
        label.translatesAutoresizingMaskIntoConstraints = false
        return label
    }()

    func setupViews() {
        contentView.backgroundColor = .red
        contentView.addSubview(label)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

}

每当我将细胞出列时,我都会获得正确的细胞大小和正确的颜色。但是当我在我的单元格的setupViews函数中设置标签上的约束时,视图控制器甚至都不会完全打开。如果我没有设置约束,则标签不存在。我不知道该做什么,我会感激一些帮助。谢谢!

3 个答案:

答案 0 :(得分:0)

我看了你上面的代码片段,我发现你没有设置Frame你需要设置Frame的{​​{1}}

UILabel

希望这能帮到你

答案 1 :(得分:0)

由于您的项目使用自动布局约束,因此您必须为标签设置它们:

func setupViews() {
    contentView.backgroundColor = .red
    contentView.addSubview(label)
    label.centerXAnchor.constraint(equalTo: contentView.centerXAnchor).isActive = true
    label.centerYAnchor.constraint(equalTo: contentView.centerYAnchor).isActive = true
}

答案 2 :(得分:0)

在您的InterestsCell类中添加以下代码:

 override func layoutSubviews() {
        super.layoutSubviews()
        setupViews()
    }

代替:

override init(frame: CGRect) {
        super.init(frame: frame)

        setupViews()
    }
required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

希望这行得通