我几乎整整一天都在苦苦挣扎,无法找到解决方案。我正在尝试在视图控制器中创建一个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函数中设置标签上的约束时,视图控制器甚至都不会完全打开。如果我没有设置约束,则标签不存在。我不知道该做什么,我会感激一些帮助。谢谢!
答案 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)
}
希望这行得通